1. 程式人生 > 其它 >go 中文字串長度, rune型別

go 中文字串長度, rune型別

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