go预言支持两种方式遍历字符串
字节数组方式遍历:
func main(){
str := "hello,世界"
num := len(str)
for i := 0; i< num ; i++ {
fmt.Println(str[i])
}
}
运行:
104
101
108
108
111
44
228
184
150
231
149
140
可以看出,这个字符串的长度为13,直观来看它的长度不应该有那么长,这是因为每个中文字符在 UTF-8 中占三个字节,而不是一个字节。
另一种方式是以 Unicode 字符遍历:
func Unwhile(){
str := "hello,世界"
for i, ch := range str {
fmt.Println(i, ch)
}
}
以 Unicode 字符方式遍历时,每个字符的类型是 rune,而不是 byte.
在Go语言中支持两个字符类型,一个是 byte(实际是 uint8 的别名),代表 UTF-8 字符串的单个字节的值,另一个是 rune,代表单个 Unicode 字符,处于简化语言的考虑,go语言的多数 api 都假设字符串为 UTF-8 编码,Unicode字符在标准库中虽然支持,但是却很少使用.