Maison > développement back-end > Golang > 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
Libérer: 2024-11-19 03:39:02
original
653 Les gens l'ont consulté

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]
}
Copier après la connexion
str := "large text"
str2 := []byte(str)
for _, s := range str2 {
  // use s
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal