golang中string rune byte 三者的关系

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

例如

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

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

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

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

总结:

  • rune 能操作任何字符
  • byte 不支持中文的操作

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

ft_authoradmin  ft_create_time2018-03-09 11:31
 ft_update_time2018-03-09 11:32