Maison  >  Article  >  développement back-end  >  Comment accéder aux octets et aux runes dans les chaînes Go ?

Comment accéder aux octets et aux runes dans les chaînes Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-19 03:39:02568parcourir

How do you access bytes and runes in Go strings?

Accès et conversion d'octets dans les chaînes Go

Dans Go, les chaînes stockent des octets codés en UTF-8, et non des caractères ou des runes. L'accès aux éléments d'une chaîne, noté str[i], renvoie un octet (byte ou uint8) plutôt que de le convertir en rune.

Lorsque vous parcourez une chaîne à l'aide de la construction for ... range, vous peut accéder aux octets ou aux runes. L'indexation d'une chaîne (par exemple, str[i]) accède directement aux octets, tandis que la boucle sans conversion (for i := range str) parcourt les runes.

Considérations sur les performances

La conversion d'une chaîne en tranche d'octets à l'aide de []byte(str) n'effectue pas de copie réelle ; il est optimisé. Ainsi, il n'y a aucune différence de performances entre les deux méthodes présentées :

str := "large text"
for i := range str {
  // use str[i]
}
str := "large text"
str2 := []byte(str)
for _, s := range str2 {
  // use s
}

Cependant, pour des performances et une clarté de code maximales, il est recommandé d'utiliser la méthode qui correspond à l'intention du code :

  • Parcourez les octets en utilisant la première méthode si vous avez spécifiquement besoin d'accéder aux octets.
  • Parcourez les runes en utilisant la deuxième méthode si vous devez accéder aux caractères.

Itération de caractères

Lors de l'itération sur des caractères runiques dans une chaîne, il est important de noter que les caractères multi-octets, tels que les caractères Unicode , peut être représenté à l'aide de plusieurs octets dans le codage UTF-8 sous-jacent. La syntaxe for ... range str gère cela automatiquement, renvoyant l'index d'octet et la valeur du caractère (rune) à chaque itération.

Ressources supplémentaires

  • [ Le blog Go : chaînes, octets, runes et caractères dans Go](https://blog.golang.org/strings)
  • [golang : []byte(string) vs []byte(*string)](https://go.dev/issue/22847)

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