ti-enxame.com

Como indexar caracteres em uma string de Golang?

Como obter uma saída "E" em vez de 69?

package main

import "fmt"

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

O Golang tem função para converter um char para byte e vice-versa?

63
user977828

Os literais de string interpretados são seqüências de caracteres entre aspas duplas "" usando a codificação UTF-8 (possivelmente de múltiplos bytes) de caracteres individuais. Em UTF-8, ASCII caracteres são de byte único correspondentes aos primeiros 128 caracteres Unicode. As cordas se comportam como fatias de bytes. Uma runa é um valor inteiro que identifica um ponto de código Unicode. Assim sendo,

package main

import "fmt"

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

Saída:

e
e
界

Ler:

Go Programming Language Specification seção em Conversões .

O Blog Go: Strings, bytes, runas e personagens em Go

107
peterSO

Que tal isto ?

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

Como Peter aponta, para permitir mais do que apenas ASCII:

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

Go não tem um tipo de personagem como tal. byte é freqüentemente usado para caracteres ASCII, e runa é usada para caracteres Unicode, mas ambos são apenas aliases para tipos inteiros (uint8 e int32). Então, se você quiser forçá-los a serem impressos como caracteres em vez de números, você precisa usar Printf("%c", x). A especificação do formato %c funciona para qualquer tipo inteiro.

6
andybalholm

A solução geral para interpretar um caractere como uma string é string("HELLO"[1]).

A solução de Rich também funciona, é claro.

4
Thomas Kappler

Pode ser feito via fatiamento também

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1:2])
}
4
Samkit Jain