了解Go 中字串中符文和位元組範圍的差異
在Go 中使用range 子句迭代字串時,您可以遇到兩種資料類型:rune 和byte。這可能會令人困惑,所以讓我們深入研究為什麼會發生這種情況。
根據 Go 語言定義,字串是位元組序列,可以使用 str[index] 透過索引來存取它們的各個元素。但是,當您使用 for range 循環字串時,檢索到的字元是 rune 類型。
這種差異源自於 range 子句的定義,它允許對字串中的程式碼點(Unicode 字元)進行迭代。每個代碼點由一個或多個位元組組成,取決於字元的編碼。 range 子句迭代這些程式碼點的起始字節,提供對應的 rune 值作為元組中的第二個元素。
如果在迭代過程中遇到無效的 UTF-8 序列,則第二個值將是Unicode 取代字元 (0xFFFD),迭代器將前進一個位元組。
要迭代字串的各個位元組,可以使用以下命令替代方案:
手動位元組循環:
for i := 0; i < len(s); i++ { // Access the byte at position i in "s" }
轉換為位元組切片:
for i, b := range []byte(s) { // Access both the index (i) and the byte (b) }
雖然對字串的位元組進行範圍不太簡潔,但它提供了對原始位元組值的訪問,這在某些情況下可能是必要的。透過理解 rune 和 byte range 之間的區別,您可以有效地操作 Go 中的字串來滿足您想要的要求。
以上是Go 字串:符文與位元組迭代:我什麼時候應該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!