Maison > Article > développement back-end > Pourquoi devriez-vous utiliser des tranches de runes au lieu de chaînes lorsque vous travaillez avec des caractères multi-octets dans Go ?
Comprendre la différence entre le range over string et le rune slice
Lorsque vous travaillez avec des chaînes dans Go, vous pouvez rencontrer deux scénarios courants : le range over une chaîne et s'étendant sur une tranche de rune. Bien que les deux approches puissent sembler similaires pour récupérer des caractères, il existe une différence subtile qui peut avoir un impact sur le comportement du programme.
Ranging Over a String
Considérez le code suivant :
<code class="go">func main() { str := "123456" for _, s := range str { fmt.Printf("type of v: %s, value: %v, string v: %s \n", reflect.TypeOf(s), s, string(s)) } }</code>
Ce code parcourt chaque caractère de la chaîne, mais notez que le type de données de s est un int32 et que la ou les chaînes sont utilisées pour coder la rune sous forme de chaîne.
Ranging Over a Rune Slice
Maintenant, examinons une variante dans laquelle nous convertissons la chaîne en une tranche de rune en utilisant []rune(str):
<code class="go">func main() { str := "123456" for _, s := range []rune(str) { fmt.Printf("type : %s, value: %v ,string : %s\n", reflect.TypeOf(s), s, string(s)) } }</code>
Ici, s est une rune, et les chaînes fournissent toujours la même représentation sous forme de chaîne.
La distinction subtile
Bien que les résultats dans les deux scénarios puissent sembler identiques à première vue, il y a une différence cruciale :
Cette distinction subtile devient évidente lorsque l'on travaille avec des caractères multi-octets (caractères non latins comme le chinois ou le coréen), car leurs représentations UTF-8 sont constituées de plusieurs octets.
Implications pratiques
Lorsqu'il s'agit de caractères multi-octets, l'utilisation d'une tranche de rune au lieu d'une chaîne est plus appropriée. En effet, une rune représente un seul caractère logique, alors qu'une chaîne peut contenir plusieurs octets représentant ce même caractère.
Pour éviter des problèmes potentiels, il est généralement recommandé de préférer les boucles de plage aux tranches de rune plutôt qu'aux chaînes, en particulier lorsque traitant de caractères non latins.
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!