1.简介
字符串是不可变字节(byte)序列,其本身是一个复杂的结构。默认以UTF-8编码存储Unicode字符,内置函数len()返回字节数组长度。字符串默认值不是nil,而是""。
func main(){
strChinese :="我爱我的祖国"
strEnglish := "I love my country"
fmt.Printf("strChinese len:%d,strEnglish len:%d\n",len(strChinese),len(strEnglish))
var s string
fmt.Println("" == s)
}
输出
strChinese len:18,strEnglish len:17
true
utf-8下一个汉字等于三个字符,所以汉字字符串的长度为8*3。
2.使用"`"字符定义不做转义的原始字符串,支持跨行。
func main(){
ss:= `line\r\n,
line2`
fmt.Println(ss)
}
会按原样输出
3.遍历字符串
使用for遍历字符串时,分byte和rune两种方式。
func main(){
strChinese :="中国"
for i:=0;i<len(strChinese) ;i++ {
fmt.Printf("%d:[%c]\n",i,strChinese[i])
}
for i,c:=range strChinese{
fmt.Printf("%d:[%c]\n",i,c)
}
}
输出:
0:[ä]
1:[¸]
2:[]
3:[å]
4:[ ]
5:[½]
0:[中]
3:[国]
4.获取字符串长度
当字符串时单字节时,可以使用len()函数获取;当为多字节时,可以使用 utf8 中的 RuneCountInString获取字符串长度,也可以将字符串转换为rune切片,然后通过 len 函数获取长度。
func main(){
strChinese :="中国"
fmt.Println(utf8.RuneCountInString(strChinese))
runes:=[]rune(strChinese)
fmt.Println(len(runes))
}
以上都输出2