奇思妙想 · 2024年 9月 17日 0

如何理解Go语言的rune?

64 次浏览

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)。