Comprendre l'accès aux octets dans les chaînes Go
L'accès aux caractères dans une chaîne à l'aide de la notation slice str[i] renverra une valeur de type octet en Aller. Cela soulève la question de savoir si Go effectue une conversion d'une rune en octet lors de cette opération.
Accès aux octets dans Go
Notamment, les chaînes Go stockent UTF-8 octets codés du texte plutôt que des caractères ou des runes. Par conséquent, l'indexation d'une chaîne, c'est-à-dire str[i], récupère directement la valeur d'octet correspondante. Ainsi, aucune conversion n'est effectuée lors de cette opération.
Itération de rune utilisant for ... range
Lors de l'utilisation de la boucle for ... range pour parcourir une chaîne , il récupère les runes (caractères) plutôt que les octets. En effet, Go optimise la boucle pour parcourir les décalages d'octets des runes. La première valeur de la boucle représente l'index d'octet, tandis que la deuxième valeur est la rune ou le caractère réel. Cette boucle évite la conversion en []byte slice, garantissant de meilleures performances lors du traitement des caractères codés en UTF-8.
Conversion en []byte pour l'itération d'octets
Vous pouvez également convertir la chaîne en tranche []byte à l'aide de la fonction []byte(str). Cette approche n'entraîne pas de copie puisque Go l'optimise pour pointer vers les octets de la chaîne d'origine. Malgré cette optimisation, itérer sur les octets de cette manière est moins efficace que d'utiliser la boucle for ... range pour itérer sur les runes.
Conclusion
En résumé , Les chaînes Go stockent les octets codés en UTF-8 et l'accès aux éléments à l'aide de str[i] récupère les valeurs d'octets sans aucune conversion. Lors d'une itération sur des runes (caractères), utiliser la boucle for ... range directement sur la chaîne est plus efficace que de la convertir en tranche []byte.
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!