Den Unterschied zwischen Rune- und Byte-Ranging in Strings in Go verstehen
Beim Durchlaufen eines Strings in Go mithilfe der Range-Klausel können Sie möglicherweise stoßen auf zwei Datentypen: Rune und Byte. Das kann verwirrend sein, also schauen wir uns genauer an, warum das passiert.
Gemäß der Go-Sprachdefinition sind Strings Folgen von Bytes, und auf ihre einzelnen Elemente kann über ihren Index mit str[index] zugegriffen werden. . Wenn Sie jedoch mit for range eine Schleife über eine Zeichenfolge durchführen, sind die abgerufenen Zeichen vom Typ rune.
Dieser Unterschied ergibt sich aus der Definition der Range-Klausel, die eine Iteration über Codepunkte (Unicode-Zeichen) in der Zeichenfolge ermöglicht . Jeder Codepunkt besteht je nach Kodierung des Zeichens aus einem oder mehreren Bytes. Die Range-Klausel iteriert über die Startbytes dieser Codepunkte und stellt den entsprechenden Runenwert als zweites Element im Tupel bereit.
Wenn Sie während der Iteration auf eine ungültige UTF-8-Sequenz stoßen, ist der zweite Wert der Unicode-Ersatzzeichen (0xFFFD), und der Iterator rückt um ein Byte vor.
Um über die einzelnen Bytes einer Zeichenfolge zu iterieren, können Sie Folgendes verwenden Alternativen:
Manuelle Byte-Schleife:
for i := 0; i < len(s); i++ { // Access the byte at position i in "s" }
Konvertieren in ein Byte-Slice:
for i, b := range []byte(s) { // Access both the index (i) and the byte (b) }
Im Bereich über die Bytes Die Darstellung einer Zeichenfolge ist weniger prägnant, sie ermöglicht den Zugriff auf die Rohbytewerte, was in bestimmten Szenarien erforderlich sein kann. Wenn Sie den Unterschied zwischen Rune- und Byte-Ranging verstehen, können Sie Strings in Go effektiv manipulieren, um Ihre gewünschten Anforderungen zu erfüllen.
Das obige ist der detaillierte Inhalt vonGo Strings: Rune vs. Byte Iteration: Wann sollte ich welche verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!