您好,登錄后才能下訂單哦!
這篇文章主要介紹“go語言字符類型byte與rune源碼分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“go語言字符類型byte與rune源碼分析”文章能幫助大家解決問題。
byte
類型介紹byte 類型是 uint8 的別名,可以表達只占用 1 個字節的傳統 ASCII 編碼的字符,例如 var c byte = 'A'
用單引號括起來的單個字符是字符類型,用雙引號括起來的字符是字符串類型
package main import "fmt" func main(){ var c byte = 'A' fmt.Println(c) fmt.Printf("%T ",c) fmt.Printf("\n") var d rune = 'A' fmt.Println(d) fmt.Printf("%T ",d) // var e byte = 'AB' // more than one character in rune literal // var e rune = 'AB' // more than one character in rune literal var e string = "AB" fmt.Println(e) fmt.Printf("%T ",e) fmt.Printf("\n") var f byte = 'C' println(f) f = 88 println(f) } // 結果如下 65 uint8 65 int32 AB string 67 88
rune
類型介紹在書寫 Unicode 字符時,需要在 16 進制數之前加上前綴\u
或者\U
。
Unicode 至少占用 2 個字節,所以我們使用 int16 或者 int 類型來表示。
需要使用到 4 字節,則使用\u
前綴,如果需要使用到 8 個字節,則使用\U
前綴。
var h int = '\u0041' fmt.Println(h) // 65 var i int = '\U00000041' fmt.Println(i) // 65
package main import "fmt" func main(){ str:="hello 世界" for i:=0;i<len(str);i++{ fmt.Printf("%c",str[i]) // hello ??? fmt.Printf("\n") } } // 結果如下: h e l l o ? ? ?
上面結果,英文字符正確打印,但中文亂碼。是因為UTF8編碼下一個中文漢字由3~4個字節組成,而字符串是由byte字節組成,所以長度也是byte字符長度,這樣遍歷時遇到中文就亂碼了。
在 Go 中,有一個遍歷方式是 range
,它默認就是以 UTF-8 編碼形式去讀每一個字符。當涉及到的字符串中含有非英文字符時,可以使用 range 來遍歷:
104 101 108 108 111 32 19990 30028
此時輸出的字節編碼就是 UTF-8 編碼號,UTF-8 編碼是包含 ASCII 編碼的,所以前 6 個編號還是一樣的,后面兩個編號分別代表世,界。
所謂對字符串的修改其實不是對字符串本身的修改,而是復制字符串,同時修改值,即重新分配來內存。
在go中修改字符串,需要先將字符串轉化成數組,[]byte
或 []rune
,然后再轉換成 string型。
package main import "fmt" func main(){ str:="hello" fmt.Println(str) s1:=[]byte(str) s1[0]='H' fmt.Println(string(s1)) } // 結果如下 hello Hello
package main import "fmt" func main(){ str01:="hello 世界" fmt.Println(str01) s2:=[]rune(str01) s2[0]='H' fmt.Println(string(s2)) } // 結果如下 hello 世界 Hello 世界
關于“go語言字符類型byte與rune源碼分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。