Maison >développement back-end >Golang >Que sont les runes en Go? Comment se rapportent-ils aux chaînes et à l'Unicode?
Dans GO, une rune est un alias pour le type de données int32
, et il représente un seul point de code Unicode. Cela signifie qu'une rune peut représenter n'importe quel caractère dans la norme Unicode, y compris les lettres, les chiffres, les marques de ponctuation et même les emoji. Les runes sont les éléments constitutifs du texte en Go, et ils sont particulièrement utiles lorsqu'ils traitent du texte international qui comprend des personnages non ASCII.
La relation entre les runes, les chaînes et l'Unicode dans GO est fondamentale pour comprendre comment le texte est géré dans la langue. Une chaîne Go est une séquence d'octets, mais elle est interprétée comme une séquence de points de code Unicode (runes) lorsqu'il est utilisé dans les opérations qui impliquent un traitement de texte. Lorsque vous itérez sur une chaîne ou le convertissez en une tranche de runes, Go décode les octets en points de code Unicode, vous permettant de travailler avec des caractères individuels quel que soit leur encodage.
Par exemple, considérons une chaîne qui contient le texte "Café". Lorsqu'il est représenté comme une chaîne en Go, il est stocké comme une séquence d'octets, mais lorsque vous l'allez ou le convertissez en runes, Go l'interprète comme une séquence de points de code Unicode: 'C', 'A', 'F' et 'É'. Cela vous permet de travailler avec les personnages individuels, même si «éé» est représenté par plusieurs octets dans le codage UTF-8.
Pour itérer sur les runes dans une chaîne Go, vous pouvez utiliser le mot clé range
dans une boucle pour une boucle. Lorsque range
est utilisée avec une chaîne, il renvoie l'index et la rune à cet index. Voici un exemple de la façon de procéder:
<code class="go">str := "café" for _, runeValue := range str { fmt.Printf("%c", runeValue) }</code>
Dans cet exemple, runeValue
prendra la valeur de chaque rune dans la chaîne séquentiellement. Le _
est utilisé pour ignorer l'index, car nous ne nous intéressons que par les runes elles-mêmes.
Il est important de noter que l'utilisation range
avec une chaîne dans GO gère correctement les caractères Unicode à plusieurs octets. Si vous deviez itéré sur la chaîne à l'aide d'une approche traditionnelle basée sur l'index, vous pourriez mal diviser les caractères multi-octets.
Go fournit plusieurs fonctions dans le package unicode/utf8
à convertir entre les runes et les chaînes:
String to runes:
utf8.DecodeRuneInString(s string) (r rune, size int)
: Cette fonction décode la première rune dans la chaîne s
et renvoie la rune et le nombre d'octets qu'il occupe.[]rune(s string)
: Convertir une chaîne en une tranche de runes est un moyen courant de travailler avec des caractères individuels dans Go.Exemple:
<code class="go">str := "café" runes := []rune(str) fmt.Println(runes) // Output: [99 97 102 233]</code>
Runes vers String:
string(runes []rune)
: la conversion d'une tranche de runes en une chaîne est simple.Exemple:
<code class="go">runes := []rune{99, 97, 102, 233} str := string(runes) fmt.Println(str) // Output: café</code>
GO gère les caractères Unicode en utilisant les runes de plusieurs manières clés:
Opérations de caractère:
Les runes vous permettent d'effectuer des opérations sur des caractères Unicode individuels. Par exemple, vous pouvez utiliser des runes pour vérifier si un caractère est une lettre, un chiffre ou une catégorie Unicode spécifique à l'aide de fonctions du package unicode
.
Exemple:
<code class="go">r := 'é' if unicode.IsLetter(r) { fmt.Println("The character is a letter.") }</code>
unicode/utf8
de Go inclut des fonctions comme utf8.ValidString(s string)
pour vérifier si une chaîne contient des séquences UTF-8 valides, qui est cruciale pour garantir que les données de texte sont correctement interprétées.Dans l'ensemble, l'utilisation par GO des runes pour gérer les caractères Unicode fournit un moyen robuste et flexible de travailler avec des données de texte, garantissant que l'internationalisation et les problèmes de codage des caractères sont correctement gérés.
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!