Rune vs. Byte Ranging over String Explained
Lorsque vous parcourez une chaîne à l'aide d'une boucle for dans Go, vous avez peut-être remarqué une différence dans les types de données obtenus en fonction de l’approche que vous utilisez. L'étendue d'une chaîne en utilisant la forme "for i, c := range s" donne un type de rune, tandis que l'utilisation d'une indexation directe comme "s[i]" renvoie un type d'octet.
Cette différence provient du sous-jacent définition d'une chaîne en Go, qui la spécifie comme une séquence d'octets. Lorsque vous accédez à une chaîne en utilisant "s[i]", vous récupérez directement la valeur de l'octet à l'index i. Cependant, lorsque vous parcourez une chaîne en utilisant "for range", la clause range opère sur les points de code Unicode, qui sont représentés sous forme de runes dans Go.
La raison pour laquelle range fonctionne sur les runes est de fournir une manière idiomatique pour parcourir une chaîne sans avoir à décoder manuellement les séquences UTF-8. Si la plage ne fonctionnait que sur des octets, vous devrez écrire vos propres boucles personnalisées pour parcourir les runes.
Cependant, vous pouvez toujours accéder aux octets d'une chaîne en utilisant des techniques telles que :
for i := 0; i < len(s); i++ { ... }
ou
for i, b := range []byte(s) { ... }
Ces méthodes alternatives vous offrent la flexibilité de travailler explicitement avec des octets lorsque cela est nécessaire.
En résumé, l'utilisation de Les runes dans les constructions for-range sur les chaînes fournissent un moyen pratique de parcourir la représentation Unicode d'une chaîne. Bien que vous ayez toujours accès à des octets individuels si nécessaire, cette approche rationalise le processus, rendant la manipulation des chaînes plus facile et plus intuitive dans Go.
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!