golang中string rune byte 三者的关系

在Golang中 string 底层是用byte字节数组存储的,并且是不可以修改的。

例如

s:="Go编程"
fmt.Println(len(s)) //输出结果应该是8因为中文字符是用3个字节存的(2+3*2=8)。
fmt.Printf("%d", len(string(rune('编')))) //经测试一个汉字确实占用3个字节,所以结果是3

如果想要获得字符个数的话,需要先转换为rune切片再使用内置的len函数

fmt.Println(len([]rune(s))) // 结果就是4了。

所以用string存储unicode的话,如果有中文,按下标是访问不到的,因为你只能得到一个byte。 要想访问中文的话,还是要用rune切片,这样就能按下表访问。

总结:
rune 能操作任何字符
byte 不支持中文的操作

示例:https://blog.haohtml.com/archives/14903