我们可以通过获取从字符串转换的符文切片的长度来获取字符串中的符文数。
s := "世界"
runes := []rune(s)
fmt.Println(len(runes))
或使用RuneCountInString
包中的unicode/utf8
功能。
fmt.Println(utf8.RuneCountInString(s))
两者之间有什么区别?
答案 0 :(得分:3)
区别在于第一个:
runes := []rune(s)
length := len(runes)
必须逐步执行s
以构建一个rune
的片段,然后询问该片段的长度,而utf8.RuneCountInString
只是逐字节递增s
每当它看到构成UTF-8字符的一系列连续字节时就会有一个计数器。
[]rune(s)
版本必须完成比utf8.RuneCountInString
更多的工作。
在源头游荡的粗略表示[]rune(someString)
由stringtoslicerune
实现,它实际上对字符串进行了两次迭代:一次找出rune
有多少rune
另一个将null
复制到切片中。我不确定这一点,因为我对Go的实施细节并不熟悉。