• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go语言从入门到精通 - 字符类型

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  • 介绍 什么是字符串的字符类型
  • 介绍 如何Go语言字符类型byte和rune是什么
  • 介绍 UTF-8 和 Unicode编码的字符串有何区别

本小节视频教程和代码:百度网盘

可先下载视频和源码到本地,边看视频边结合源码理解后续内容,边学边练。

Go语言字符类型(byte和rune)

字符串中的每一个元素叫做“字符”,在遍历或者单个获取字符串元素时可以获得字符。

Go 语言的字符有以下两种:

  • 一种是 uint8 类型,或者叫 byte 型,byte类型的值需用8个比特位表示,代表了 ASCII 码的一个字符。
  • 另一种是 rune 类型,代表一个 UTF-8 字符。当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型实际是一个 int32。

使用 fmt.Printf 中的%T动词可以输出变量的实际类型,使用这个方法可以查看 byte 和 rune 的本来类型,代码如下:

var a byte = 'a'
fmt.Printf("%d %T\n", a, a)
var b rune = '你'
fmt.Printf("%d %T\n", b, b)

例子输出结果:

97 uint8
20320 int32

可以发现,byte 类型的 a 变量,实际类型是 uint8,其值为 'a',对应的 ASCII 编码为 97。

rune 类型的 b 变量的实际类型是 int32,对应的 Unicode 码就是 20320。

Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。

UTF-8 和 Unicode 有何区别?

Unicode 是字符集,ASCII 也是一种字符集。

字符集为每个字符分配一个唯一的 ID,我们使用到的所有字符在 Unicode 字符集中都有唯一的一个 ID 对应,例如上面例子中的 a 在 Unicode 与 ASCII 中的编码都是 97。“你”在 Unicode 中的编码为 20320,但是在不同国家的字符集中,“你”的 ID 会不同。而无论任何情况下,Unicode 中的字符的 ID 都是不会变化的。

  • UTF-8 是编码规则,将 Unicode 中字符的 ID 以某种方式进行编码。UTF-8 的是一种变长编码规则,从 1 到 4 个字节不等。编码规则如下:
    0xxxxxx 表示文字符号 0~127,兼容 ASCII 字符集。
  • 从 128 到 0x10ffff 表示其他字符。

根据这个规则,拉丁文语系的字符编码一般情况下,每个字符依然占用一个字节,而中文每个字符占用 3 个字节。

广义的 Unicode 指一个标准,定义字符集及编码规则,即 Unicode 字符集和 UTF-8、UTF-16 编码等。

小结

本小节主要讲解了Go语言中什么是字符串的字符类型,以及字符类型byte和rune是什么,还有就是由UTF-8 和 Unicode编码的字符串都有何区别。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言嵌入类型发布时间:2022-07-10
下一篇:
Go 和 Syscall发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap