Maison >développement back-end >Golang >Rune contre octet dans l'itération Go String : quand puis-je obtenir une rune et quand un octet ?

Rune contre octet dans l'itération Go String : quand puis-je obtenir une rune et quand un octet ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 10:33:11862parcourir

Rune vs. Byte in Go String Iteration: When Do I Get a Rune and When a Byte?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn