go 中文字串長度, rune型別
阿新 • • 發佈:2022-03-19
package main //can https://www.jianshu.com/p/4fbf529926ca import ( "fmt" "unicode/utf8" ) func main() { var str = "hello 你好" //golang中string底層是通過byte陣列實現的,座椅直接求len 實際是在按位元組長度計算 所以一個漢字佔3個位元組算了3個長度 fmt.Println("len(str):", len(str)) //以下兩種都可以得到str的字串長度 //golang中的unicode/utf8包提供了用utf-8獲取長度的方法 fmt.Println("RuneCountInString:", utf8.RuneCountInString(str)) //通過rune型別處理unicode字元 fmt.Println("rune:", len([]rune(str))) fmt.Println("rune:", len([]int32(str))) }
輸出:
len(str): 12 // 為何是12 golang中string底層是通過byte陣列實現的。中文字元在unicode下佔2個位元組,在utf-8編碼下佔3個位元組,而golang預設編碼正好是utf-8。
RuneCountInString: 8
rune: 8
rune: 8
golang中海油一個byte資料型別與rune相似,它們都是用來表示字元型別的變數型別。它們的不同在於:
byte 等同於int8,常用來處理ascii字元
rune 等同於int32,常用來處理unicode或utf-8字元
作者:WallisW
連結:https://www.jianshu.com/p/4fbf529926ca