先來看一個簡單的例子
func main() {
str := "你好guoke"
fmt.Println("字符串長度為:", len(str))
for i:=0; i<len(str); i++{
fmt.Println("第",i+1,"個字符為:",str[i:i+1])
}
}
輸出的結(jié)果為:
字符串長度為: 11
第 1 個字符為: ?
第 2 個字符為: ?
第 3 個字符為: ?
第 4 個字符為: ?
第 5 個字符為: ?
第 6 個字符為: ?
第 7 個字符為: g
第 8 個字符為: u
第 9 個字符為: o
第 10 個字符為: k
第 11 個字符為: e
從上面例子中可以看出,string是以byte數(shù)組形式存儲的,而一個utf8格式的中文占3個byte.要得到正確的中文字符的長度和分割,可以使用rune數(shù)組來拆分. rune類型是int32的別名,一個rune可以表示一個中文字符,go也提供了rune數(shù)組自動拆分string中文字符的方法rt := []rune(str).
我們再把上面例子修改一下:
func main() {
str := "你好guoke"
rt := []rune(str)
fmt.Println("字符串長度為:", len(rt))
for i:=0; i<len(rt); i++{
fmt.Println("第",i+1,"個字符為:",string(rt[i]))
}
}
得到的輸出結(jié)果為:
字符串長度為: 7
第 1 個字符為: 你
第 2 個字符為: 好
第 3 個字符為: g
第 4 個字符為: u
第 5 個字符為: o
第 6 個字符為: k
第 7 個字符為: e
這樣就能比較好的處理中文了,而且不會出現(xiàn)亂碼的情況.