Golang byte和rune型別
阿新 • • 發佈:2021-02-05
Go語言的字元有以下兩種:
1.Uint8型別,又叫byte,代表了ASCII碼的一個字元
2.rune型別,代表了UTF-8字元
當需要處理中文或者其他複合字符時,則需要使用rune型別,rune型別實際是一個int32.
1.定義字元用單引號' '定義,golang中定義字元,字元屬於int型別
var a = 'a'
fmt.Printf("值: %v 型別: %T",a,a) // 輸出結果為a對應的ASCII碼值97,型別:uint8; 如果需要原樣輸出,可用%c輸出
2.定義一個字串,輸出字串中的字元
var str = "this" fmt.Printf("值(原樣輸出): %c 型別:%T",str[2],str[2]) // 輸出結果為:值(原樣輸出):i 型別:uint8; str[2]表示字串角標,角標從0開始計算
3.一個漢字佔用三個位元組(utf-8),編碼後屬於int型別, 一個字母佔用一個位元組.
unsafe.Sizeof()無法檢視string型別資料所佔用的儲存空間,可用len()檢視
var str = "你好go"
fmt.Printf(len(str)) // 輸出值為8,3(你)+3(好)+2(go)
var a = '嗨'
fmt.Printf("值: %v 型別: %T",a,a) //Unicode編碼十進位制,值: 型別:int32
4.通過迴圈輸出字串中的字元:利用range (rune)
如果是純字母可以利用len遍歷輸出,如果包含漢字需要用range遍歷輸出,(因為漢字所佔3個位元組,所以利用len輸出會有誤)
s := "你好 golang"
for_, v := range s{ // rune
fmt.Printf("%c",v) // 你好 golang
}
修改字串
要修改字串需要先將其轉換成[ ]rune或[ ]byte,完成後再轉換為string, 無論哪種轉換,都會重新分配記憶體,並複製位元組組數
func changeString(){ S1 := "big" byteS1 := []byte(S1) // 將字串轉換成byte型別 byteS1[0] = 'P' // 將byteS1[0]位置的值(b)改為P fmt.Println(string(btyeS1)) //通過string強制把byte型別轉化為string,輸出結果為:Pig } // 如果是漢字道理相同,利用rune轉化