Heim >Backend-Entwicklung >Golang >Warum gibt der Bereich über einen String in Go Runen zurück, während die Indizierung Bytes zurückgibt?

Warum gibt der Bereich über einen String in Go Runen zurück, während die Indizierung Bytes zurückgibt?

Barbara Streisand
Barbara StreisandOriginal
2024-12-27 20:12:32620Durchsuche

Why Does Ranging Over a String in Go Return Runes, While Indexing Returns Bytes?

Warum Bereich über String Runen zurückgibt, Byte für Index

Laut der Go-Dokumentation und unseren eigenen Tests, wenn der Bereich über einen String geht, Die erhaltenen Elemente sind vom Typ Rune, wohingegen die Indizierung in die Zeichenfolge mithilfe von str[index] Bytes ergibt.

Die Der Hauptgrund für diese Unterscheidung liegt in der Definition des String-Typs. Ein String stellt eine Folge von Bytes dar, und der Zugriff auf einzelne Bytes ist durch Indizierung möglich.

Andererseits wird die Range-Klausel in for verwendet Anweisung. Sie ermöglicht das Durchlaufen von Unicode-Codepunkten in einer Zeichenfolge. Beginnend mit dem 0-Byte-Index gibt die Iteration den ersten Byte-Index jedes UTF-8-codierten Codepunkts und den entsprechenden Codepunktwert (Rune-Typ) zurück.

Wenn Sie über die Bytes in der Zeichenfolge anstelle von Codepunkten iterieren möchten, gibt es einige Optionen:

  • Verwenden Sie eine reguläre for-Schleife, um über die Indizes von 0 bis zu iterieren len(s)-1 .
  • Verwenden Sie for i, b := range []byte(s), um die Zeichenfolge in ein Byte-Slice umzuwandeln, und iterieren Sie dann über die Bytes.

Diese Alternativen bieten direkten Zugriff auf Bytes, ohne die Lesbarkeit des Codes zu beeinträchtigen.

Das obige ist der detaillierte Inhalt vonWarum gibt der Bereich über einen String in Go Runen zurück, während die Indizierung Bytes zurückgibt?. 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