首頁  >  文章  >  後端開發  >  如何存取 Go 字串中的位元組和符文?

如何存取 Go 字串中的位元組和符文?

Barbara Streisand
Barbara Streisand原創
2024-11-19 03:39:02565瀏覽

How do you access bytes and runes in Go strings?

Go 字串中的位元組存取與轉換

在Go 中,字串儲存UTF-8 編碼的位元組,而不是字元或符文。存取字串的元素(表示為 str[i])會傳回一個位元組(byte 或 uint8),而不是將其轉換為符文。

當使用 for ... range 建構迭代字串時,您可以可以存取位元組或符文。索引字串(例如 str[i])直接存取字節,而沒有轉換的循環(for i := range str)則是迭代符文。

效能注意事項

使用 []byte(str) 將字串轉換為位元組切片並不執行實際的複製;它已經被最佳化掉了。因此,所提供的兩種方法之間沒有效能差異:

str := "large text"
for i := range str {
  // use str[i]
}
str := "large text"
str2 := []byte(str)
for _, s := range str2 {
  // use s
}

但是,為了獲得最大效能和程式碼清晰度,建議使用與程式碼意圖相符的方法:

  • 如果您特別需要存取位元組,請使用第一種方法迭代位元組。
  • 使用第二種方法迭代符文如果您需要存取字符,請使用此方法。

字符迭代

在字串中迭代符文字符時,請務必注意多字節字符,例如Unicode 字符可以使用底層UTF-8編碼中的多個位元組來表示。 for ... range str 語法會自動處理此問題,在每次迭代時傳回位元組索引和字元(符文)值。

其他資源

  • [ Go 部落格:字串、位元組、符文和字元Go](https://blog.golang.org/ strings)
  • [golang: []byte(string) vs []byte(*string)](https://go.dev/issue/ 22847)

以上是如何存取 Go 字串中的位元組和符文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn