Quelles sont les nuances lors de l'itération sur une chaîne en Go?
sobes.tech IA
Réponse de l'IA
Lors de l’itération sur une chaîne en Go, il est important de garder à l’esprit que la chaîne représente une séquence d’octets, et non de caractères Unicode. Le paquet unicode/utf8 fournit des fonctions pour travailler avec des séquences UTF-8 multibyte.
Points clés :
-
Itération par octets : La boucle
for i := 0; i < len(s); i++itère sur des octets individuels. Si la chaîne contient des caractères multibyte, un caractère peut être représenté par plusieurs octets.// Exemple d’itération par octets str := "Привет" for i := 0; i < len(str); i++ { println(str[i]) // affiche les octets, pas les caractères } -
Itération par runes (points de code Unicode) : Pour travailler correctement avec les caractères Unicode, utilisez la boucle
for index, ru := range s. Elle itère sur les runes (points de code Unicode), gérant les séquences UTF-8 multibyte.// Exemple d’itération par runes str := "Привет" for index, ru := range str { println(index, ru) // affiche l’indice de début de la rune et la rune elle-même (en int32) } -
Longueur de la chaîne : La fonction
len(s)retourne le nombre d’octets, pas de runes. Pour obtenir le nombre de runes, utilisezutf8.RuneCountInString(s).// Exemple de comptage d’octets et de runes str := "Привет" println("Longueur en octets :", len(str)) // affiche le nombre d’octets println("Longueur en runes :", utf8.RuneCountInString(str)) // affiche le nombre de runes -
Accès par index : L’accès via
s[i]retourne le i-ème octet, pas la rune. L’accès direct aux runes par index n’est pas prévu.// Exemple d’accès à un octet str := "Привет" println(str[0]) // affiche le premier octet de la chaîne, pas la première rune -
Tranches de chaînes : Les tranches de chaînes fonctionnent également au niveau des octets.
s[i:j]crée une nouvelle tranche d’octets.// Exemple de tranche de chaîne par octets str := "Привет" println(str[0:2]) // peut afficher une séquence incorrecte si les deux premiers octets ne forment pas une rune complète
Pour travailler de manière fiable avec Unicode en Go, il est recommandé d’utiliser l’itération par runes (range) et les fonctions du paquet unicode/utf8.