1. 程式人生 > >《快學 Go 語言》第 7 課 —— 誘人的烤串

《快學 Go 語言》第 7 課 —— 誘人的烤串

b2ad70b6fb1ed8fe44fe6c1a6d11e85389e0442d

字串通常有兩種設計,一種是「字元」串,一種是「位元組」串。「字元」串中的每個字都是定長的,而「位元組」串中每個字是不定長的。Go 語言裡的字串是「位元組」串,英文字元佔用 1 個位元組,非英文字元佔多個位元組。這意味著無法通過位置來快速定位出一個完整的字元來,而必須通過遍歷的方式來逐個獲取單個字元。

a377ec2f5754d8603168f73fb1c7ec22d9a2f4b0圖片

我們所說的字元通常是指 unicode 字元,你可以認為所有的英文和漢字在 unicode 字符集中都有一個唯一的整數編號,一個 unicode 通常用 4 個位元組來表示,對應的 Go 語言中的字元 rune 佔 4 個位元組。在 Go 語言的原始碼中可以找到下面這行程式碼,rune 型別是一個衍生型別,它在記憶體裡面使用 int32 型別的 4 個位元組儲存。

type rune int32


使用「字元」串來表示字串勢必會浪費空間,因為所有的英文字元本來只需要 1 個位元組來表示,用 rune 字元來表示的話那麼剩餘的 3 個位元組都是零。但是「字元」串有一個好處,那就是可以快速定位。

為了進一步方便讀者理解位元組 byte 和 字元 rune 的關係,我花了下面這張圖

原文連結