Comment indexer les caractères dans une chaîne de Golang?

Comment obtenir une sortie “E” plutôt que 69?

package main import "fmt" func main() { fmt.Print("HELLO"[1]) } 

Golang a-t-il une fonction pour convertir un caractère en octet et vice versa?

Les littéraux de chaîne interprétés sont des séquences de caractères entre guillemets “” utilisant le codage UTF-8 (éventuellement multi-octets) de caractères individuels. En UTF-8, les caractères ASCII sont à un octet et correspondent aux 128 premiers caractères Unicode. Les chaînes se comportent comme des tranches d’octets. Une rune est une valeur entière identifiant un sharepoint code Unicode. Donc,

 package main import "fmt" func main() { fmt.Println(ssortingng("Hello"[1])) // ASCII only fmt.Println(ssortingng([]rune("Hello, 世界")[1])) // UTF-8 fmt.Println(ssortingng([]rune("Hello, 世界")[8])) // UTF-8 } 

Sortie:

 e e界 

Lis:

Aller à la section Spécification du langage de programmation sur les conversions .

Le blog Go: chaînes, octets, runes et caractères dans Go

Comment ça ?

 fmt.Printf("%c","HELLO"[1]) 

Comme Peter le souligne, pour permettre plus que de l’ASCII:

 fmt.Printf("%c", []rune("HELLO")[1]) 

Go n’a pas vraiment un type de caractère en tant que tel. l’octet est souvent utilisé pour les caractères ASCII, et la rune est utilisée pour les caractères Unicode, mais ils ne sont que des alias pour les types entiers (uint8 et int32). Donc, si vous voulez les forcer à être imprimés en tant que caractères au lieu de chiffres, vous devez utiliser Printf("%c", x) . La spécification de format %c fonctionne pour tout type d’entier.

La solution générale pour interpréter un caractère en tant que chaîne est ssortingng("HELLO"[1]) .

La solution de Rich fonctionne également, bien sûr.

Peut être fait en tranchant aussi

 package main import "fmt" func main() { fmt.Print("HELLO"[1:2]) } 

Une autre solution pour isoler un personnage dans une chaîne

 package main import "fmt" func main() { var word ssortingng = "ZbjTS" // PRINT fmt.Println(word) yo := ssortingng([]rune(word)[0]) fmt.Println(yo) //INDEX x :=0 for x < len(word){ yo := string([]rune(word)[x]) fmt.Println(yo) x+=1 } } 

pour les tableaux de chaînes également:

 fmt.Println(ssortingng([]rune(sArray[0])[0])) 

// = ligne commentée