Rune vs. Byte Ranging über String erklärt
Beim Durchlaufen eines Strings mithilfe einer for-Schleife in Go ist Ihnen möglicherweise eine Diskrepanz in aufgefallen Die erhaltenen Datentypen hängen vom verwendeten Ansatz ab. Der Bereich über einen String mit der Form „for i, c := range s“ ergibt einen Runentyp, während die Verwendung einer direkten Indizierung wie „s[i]“ einen Bytetyp zurückgibt.
Dieser Unterschied ergibt sich aus dem zugrunde liegenden Definition einer Zeichenfolge in Go, die sie als Folge von Bytes angibt. Wenn Sie mit „s[i]“ auf eine Zeichenfolge zugreifen, rufen Sie direkt den Bytewert am Index i ab. Wenn Sie jedoch mit „for range“ über eine Zeichenfolge iterieren, arbeitet die Range-Klausel mit Unicode-Codepunkten, die in Go als Runen dargestellt werden.
Der Grund, warum „Range“ über Runen funktioniert, besteht darin, eine idiomatische Möglichkeit bereitzustellen um über eine Zeichenfolge zu iterieren, ohne UTF-8-Sequenzen manuell dekodieren zu müssen. Wenn der Bereich nur über Bytes funktionieren würde, müssten Sie Ihre eigenen benutzerdefinierten Schleifen schreiben, um die Runen zu durchlaufen.
Sie können jedoch weiterhin auf Bytes innerhalb einer Zeichenfolge zugreifen, indem Sie Techniken wie die folgenden verwenden:
for i := 0; i < len(s); i++ { ... }
oder
for i, b := range []byte(s) { ... }
Diese alternativen Methoden geben Ihnen die Flexibilität, bei Bedarf explizit mit Bytes zu arbeiten.
In Zusammenfassend lässt sich sagen, dass die Verwendung von Runen in For-Range-Konstrukten über Strings eine bequeme Möglichkeit bietet, über die Unicode-Darstellung eines Strings zu iterieren. Während Sie bei Bedarf immer noch Zugriff auf einzelne Bytes haben, rationalisiert dieser Ansatz den Prozess und macht es einfacher und intuitiver, Zeichenfolgen in Go zu bearbeiten.
Das obige ist der detaillierte Inhalt vonRune vs. Byte in der Go-String-Iteration: Wann erhalte ich eine Rune und wann ein Byte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!