1. 程式人生 > 其它 >Golang byte和rune型別

Golang byte和rune型別

技術標籤:golanggo語言

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轉化