Heim >Backend-Entwicklung >Golang >Wie greift man auf Bytes und Runen in Go-Strings zu?

Wie greift man auf Bytes und Runen in Go-Strings zu?

Barbara Streisand
Barbara StreisandOriginal
2024-11-19 03:39:02648Durchsuche

How do you access bytes and runes in Go strings?

Byte-Zugriff und -Konvertierung in Go-Strings

In Go speichern Strings UTF-8-codierte Bytes, keine Zeichen oder Runen. Der Zugriff auf Elemente einer Zeichenfolge, die als str[i] bezeichnet wird, gibt ein Byte (Byte oder uint8) zurück, anstatt es in eine Rune umzuwandeln.

Bei der Iteration über eine Zeichenfolge mit dem for ... Range-Konstrukt werden Sie kann entweder auf Bytes oder Runen zugreifen. Durch die Indizierung einer Zeichenfolge (z. B. str[i]) wird direkt auf Bytes zugegriffen, während die Schleife ohne Konvertierung (für i := range str) über Runen iteriert.

Überlegungen zur Leistung

Das Konvertieren einer Zeichenfolge in ein Byte-Slice mit []byte(str) führt keine tatsächliche Kopie durch; es ist wegoptimiert. Daher gibt es keinen Leistungsunterschied zwischen den beiden vorgestellten Methoden:

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

Für maximale Leistung und Klarheit des Codes wird jedoch empfohlen, die Methode zu verwenden, die der Absicht des Codes entspricht:

  • Iterieren Sie mit der ersten Methode über Bytes, wenn Sie speziell auf Bytes zugreifen müssen.
  • Iterieren Sie mit der zweiten Methode über Runen Methode, wenn Sie auf Zeichen zugreifen müssen.

Zeicheniteration

Beim Durchlaufen von Runenzeichen in einer Zeichenfolge ist es wichtig zu beachten, dass Multibyte-Zeichen, wie z Unicode-Zeichen können durch mehrere Bytes in der zugrunde liegenden UTF-8-Codierung dargestellt werden. Die for ... range str-Syntax verarbeitet dies automatisch und gibt den Byteindex und den Zeichenwert (Rune) bei jeder Iteration zurück.

Zusätzliche Ressourcen

  • [ The Go Blog: Strings, Bytes, Runen und Zeichen in Go](https://blog.golang.org/strings)
  • [golang: []byte(string) vs []byte(*string)](https://go.dev/issue/ 22847)

Das obige ist der detaillierte Inhalt vonWie greift man auf Bytes und Runen in Go-Strings zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn