一 go字符串简介
在go 语言中字符串是一个不可变的字节序列,最基本的组成元素的字节,并且使用UTF-8的编码方式,所以每个字符对应的字节长度是不一样的。
二 字符串遍历
2.1 其他语言的遍历方式(以php的为例)
其他语言基本上支持两种遍历方式。
2.1.1 下表遍历
s := "hello,world"
for i =0;i<len(s);i++ {
s[i]
}
2.1.2 range 方式
s := "hello,world"
for k,v := range {
}
2.2 go的字符串变量方式
2.2.1 range 的方式
和其他语言一样,直接支持range的方式
s := "hello,world"
for k,v := range s {
}
2.2.2 显示将unicode 转换为rune 的方式
go 标准库提供关于utf8到rune的函数
s := "hello,世界"
for i:=0;i<len(s) {
r,size := utf8.DecodeRuneInString(s[i:])
i += size
}
2.2.3 下标直接访问
我们之所以不能直接使用下标访问字符串,是因为我们通过下标访问的是第几个字节而不是第几个字符,而utf8方式的字符长度又是不固定的,但是我们可以将utf8编码的字符串 变为utf-32的编码方式,也就是go中的[]rune.
s := "hello,世界"
t :=[]rune(s)
for i:=0;i<len(t);i++{
t[i] // 就代表第i个字符,而不是字节了
}