Avatar ·

Qu'est-ce qu'une rune en Go et en quoi diffère-t-elle d'un octet ordinaire ?

Je viens de commencer à apprendre Go et je suis tombé sur une chose étrange — le type `rune`. Apparemment c'est un entier, mais alors pourquoi un type séparé ? J'essaie de travailler avec des strings et j'ai remarqué que lorsque je prends un caractère par index, j'obtiens des nombres étranges, pas des lettres. Voici un exemple qui m'a dérouté : ```go package main import "fmt" func main() { s := "Привет, мир!" fmt.Println(s[0]) // Affiche 208, pas 'П' fmt.Println(string(s[0])) // Affiche 'Ð', pas 'П' } ``` Pourquoi cela se produit-il ? Je m'attendais à ce que `s[0]` me donne le premier caractère de la string. Mais au lieu de cela, j'obtiens quelque chose de dénué de sens. J'ai lu qu'il faut utiliser `rune`, mais je ne comprends pas comment exactement. J'ai essayé ceci : ```go r := []rune(s) fmt.Println(string(r[0])) // Maintenant affiche 'П' ``` Cela fonctionne, mais je ne comprends pas pourquoi. Qu'est-ce qu'une `rune` en réalité ? Est-ce juste un `int32` ? Ou est-ce autre chose ? Pourquoi ce type est-il nécessaire si on peut se contenter d'octets ? Expliquez, s'il vous plaît, comment fonctionnent les strings, les bytes et les runes en Go.