字串通常有兩種設計,一種是「字元」串,一種是「位元組」串。「字元」串中的每個字都是定長的,而「位元組」串中每個字是不定長的。go 語言裡的字串是「位元組」串,英文本元占用 1 個位元組,非英文本元佔多個位元組。這意味著無法通過位置來快速定位出乙個完整的字元來,而必須通過遍歷的方式來逐個獲取單個字元。
我們所說的字元通常是指 unicode 字元,你可以認為所有的英文和漢字在 unicode 字符集中都有乙個唯一的整數編號,乙個 unicode 通常用 4 個位元組來表示,對應的 go 語言中的字元 rune 佔 4 個位元組。在 go 語言的原始碼中可以找到下面這行**,rune 型別是乙個衍生型別,它在記憶體裡面使用 int32 型別的 4 個位元組儲存。
type rune int32
使用「字元」串來表示字串勢必會浪費空間,因為所有的英文本元本來只需要 1 個位元組來表示,用 rune 字元來表示的話那麼剩餘的 3 個位元組都是零。但是「字元」串有乙個好處,那就是可以快速定位。
為了進一步方便讀者理解位元組 byte 和 字元 rune 的關係,我花了下面這張圖
《快學 Go 語言》第 7 課 誘人的烤串
字串通常有兩種設計,一種是 字元 串,一種是 位元組 串。字元 串中的每個字都是定長的,而 位元組 串中每個字是不定長的。go 語言裡的字串是 位元組 串,英文本元占用 1 個位元組,非英文本元佔多個位元組。這意味著無法通過位置來快速定位出乙個完整的字元來,而必須通過遍歷的方式來逐個獲取單個字元。使...
《快學 Go 語言》第 7 課 冰糖葫蘆串
字串通常有兩種設計,一種是 字元 串,一種是 位元組 串。字元 串中的每個字都是定長的,而 位元組 串中每個字是不定長的。go 語言裡的字串是 位元組 串,英文本元占用 1 個位元組,非英文本元佔多個位元組。這意味著無法通過位置來快速定位出乙個完整的字元來,而必須通過遍歷的方式來逐個獲取單個字元。我...
Go語言趣學指南 lesson7
本章學習目標 1 學會使用10種不同的整數型別 2 學會選擇合適的型別 3 學會使用十六進製制表示和二進位制表示 5種整數型別是有符號的 5種整數型別是無符號的 比較常用的整數型別有int和無符號的uint 整數型別 包括有符號和無符號的 實際上一共8種型別,它們取值範圍各不相同 和架構無關 雖然在...