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