1. 程式人生 > 其它 >Go 字元型別

Go 字元型別

Go語言的字元有兩種:

uint8型別,或者叫 byte 型,字串中的每個元素代表了ASCII碼的一個字元
rune型別,代表一個 UTF-8字元。


可以看到string型別中的字元預設為uint8型別,也就是byte型別

再看看字串長度和實際值:

str中字串長度和實際輸出的長度一致
str2中,輸出的長度是12,而實際是包含8個字元,根據utf8編碼可知,"你"的編碼是E4BDA0,"好"的編碼是E5A5BD,各佔用3個位元組,所以這就是為什麼輸出長度是12了
再看str2的第一個字元為什麼是ä,你的編碼是E4BDA0,第一個位元組是4E,參照ASCII碼對照表可知,4E對應的字元就是ä

從上面可以看出,當我們處理多位元組的字元時,得到的並不是我們想要的結果,這個時候就需要用到 rune

型別來處理中、日文等其他複合字符


需要將string型別的字串轉換成[]rune陣列型別,這樣便能正確的處理複合字符,因為rune型別是用utf8編碼的;需要注意的是for range遍歷字串是,會先將字串轉成[]rune陣列型別,然後再進行遍歷

Go用這兩種方式處理字串可能相對來說效能有所提升,但似乎會引起過度底層和複雜的程式碼。