rune译为符文。编程语言早期字符是1字节,国际化的趋势要求一个字符不一定是1字节。rune也是为了应对这个需求而生。假设字符串s为"A我A":
- []byte(s)会输出UTF-8格式的字符串s,总共5字节(中文"我"有3字节)。
- []rune(s)只会输出3个int32整数,每个字符对应1个。
本质上,rune就是Int32类型。
- Go语言builtin.go中:type rune = int32
类似的,len(s)会返回5,len([]rune(s))返回3.
其它编程语言为什么没有类似rune的说法?
- rune仅仅为了表达字符串的UTF-8格式视图,其它编程语言同样可能用如下方式提供类似rune的功能。
- 基本类型:C#/Java char类型本质是UTF-16格式,Swift 5之后string默认内部存储按UTF-8格式。
- 封装类:ObjC的NSString字符串内部也会按照特定格式存储(GCC编译器默认为UTF-8)。