Uma string em Go é um slice de bytes, ou []byte, apenas para leitura.
A linguagem a biblioteca padrão tratam strings especialmente - como
containers de text codificado em UTF-8.
Em outras linguagens, strings são feitas de “caracteres”.
Em Go, o conceito de caractere é chamado de |
|
package main |
|
import ( "fmt" "unicode/utf8" ) |
|
func main() { |
|
|
const s = "สวัสดี" |
Como strings são equivalentes a |
fmt.Println("Len:", len(s)) |
Indexar a string produz os valores em raw byte em cada
índice. Este loop gera o valor hexadecimal de cada um
dos bytes que constituem os pontos de código em |
for i := 0; i < len(s); i++ { fmt.Printf("%x ", s[i]) } fmt.Println() |
Para contar quantas runes tem numa string, é possível usar
o pacote |
fmt.Println("Conta runas:", utf8.RuneCountInString(s)) |
Um loop |
for idx, runeValue := range s { fmt.Printf("%#U começa em %d\n", runeValue, idx) } |
É possível atingir o mesmo resultado da iteração anterior
usando a função |
fmt.Println("Usando DecodeRuneInString") for i, w := 0, 0; i < len(s); i += w { runeValue, width := utf8.DecodeRuneInString(s[i:]) fmt.Printf("%#U começa em %d\n", runeValue, i) w = width |
Isto demonstra uma runa sendo passada para uma função. |
examineRune(runeValue) } } |
func examineRune(r rune) { |
|
Valores encapsulados em aspas simples são rune literals.
É possível comparar o valor da |
if r == 't' { fmt.Println("Encontrou um 't'") } else if r == 'ส' { fmt.Println("Encontrou uma 'saw suea'") } } |
ส é chamada de saw suea no alfabeto tailandês. |
$ go run strings-and-runes.go Len: 18 e0 b8 aa e0 b8 a7 e0 b8 b1 e0 b8 aa e0 b8 94 e0 b8 b5 Contagem de runas: 6 U+0E2A 'ส' começa no índice 0 U+0E27 'ว' começa no índice 3 U+0E31 'ั' começa no índice 6 U+0E2A 'ส' começa no índice 9 U+0E14 'ด' começa no índice 12 U+0E35 'ี' começa no índice 15 Usando DecodeRuneInString U+0E2A 'ส' começa no índice 0 |
Encontrou uma 'saw suea' U+0E27 'ว' começa no índice 3 U+0E31 'ั' começa no índice 6 U+0E2A 'ส' começa no índice 9 Encontrou uma 'saw suea' U+0E14 'ด' começa no índice 12 U+0E35 'ี' começa no índice 15 |
Próximo exemplo: Structs.