rune是Go語言中一種特殊的數據類型,它是int32的別名,幾乎在所有方面等同於int32,用於區分字符值和整數值
1 package main 2 3 import "fmt" 4 5 func main() { 6 7 var str = "hello 世界" 8 fmt.Println("len(str):", len(str)) 9 10 }
這段代碼的執行結果為:
len(str):12
從字符串字面值看len(str)的結果應該是8,但在Golang中string類型的底層是通過byte數組實現的,在unicode編碼中,中文字符占兩個字節,而在utf-8編碼中,中文字符占三個字節而Golang的默認編碼正是utf-8.
如果想要獲得真實的字符串長度而不是其所占用字節數,有兩種方法實現
方法一:
使用unicode/utf-8包中的RuneCountInString方法
str := "hello 世界"
fmt.Println("RuneCountInString:", utf8.RuneCountInString(str))
方法二:
將字符串轉換為rune類型的數組再計算長度
str := "hello 世界"
fmt.Println("rune:", len([]rune(str)))