Comprendre la différence entre les runes et les octets dans les chaînes en Go
Lors de l'itération sur une chaîne dans Go à l'aide de la clause range, vous pouvez Rencontrez deux types de données : rune et octet. Cela peut prêter à confusion, alors examinons en détail pourquoi cela se produit.
Selon la définition du langage Go, les chaînes sont des séquences d'octets et leurs éléments individuels sont accessibles par leur index à l'aide de str[index] . Cependant, lorsque vous parcourez une chaîne en utilisant for range, les caractères récupérés sont de type rune.
Cette distinction découle de la définition de la clause range, qui permet une itération sur les points de code (caractères Unicode) dans la chaîne . Chaque point de code se compose d'un ou plusieurs octets, en fonction du codage du caractère. La clause range parcourt les octets de début de ces points de code, fournissant la valeur runique correspondante comme deuxième élément du tuple.
Si vous rencontrez une séquence UTF-8 non valide pendant l'itération, la deuxième valeur sera la Caractère de remplacement Unicode (0xFFFD), et l'itérateur avancera d'un octet.
Pour parcourir les octets individuels d'une chaîne, vous pouvez utiliser ce qui suit alternatives :
Bouclage manuel d'octets :
for i := 0; i < len(s); i++ { // Access the byte at position i in "s" }
Conversion en tranche d'octets :
for i, b := range []byte(s) { // Access both the index (i) and the byte (b) }
Tout en s'étendant sur octets d'une chaîne est moins concis, il donne accès aux valeurs brutes des octets, ce qui peut être nécessaire dans certains scénarios. En comprenant la distinction entre la plage de runes et la plage d'octets, vous pouvez manipuler efficacement les chaînes dans Go pour répondre aux exigences souhaitées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!