Avatar ·

O que é rune em Go e como difere de byte?

Olá a todos! Comecei a estudar Go e me deparei com um tipo de dados estranho — rune. Li a documentação, mas não entendi completamente para que ele serve. Estou tentando trabalhar com strings e iterar sobre elas. Escrevi este código: ```go package main import "fmt" func main() { s := "Привет, мир!" for i := 0; i < len(s); i++ { fmt.Printf("%c ", s[i]) } } ``` Mas, em vez dos caracteres esperados, obtive uma bagunça: `П Ð Ð¸ в е Ñ , м и Ñ !`. Eu esperava ver cada caractere da string em ordem, mas a saída claramente não corresponde ao que eu queria. Por que isso acontece? Depois, substituí o loop por `for i, r := range s`, e tudo funcionou corretamente. Na documentação, diz que `r` é do tipo `rune`. Expliquem, por favor: 1. O que é `rune` em termos simples? 2. Qual é a diferença entre `byte` e `rune`? 3. Quando devo usar `rune` e quando `byte`? 4. Por que o loop simples com indexação não funciona para cirílico, mas `range` funciona? Agradeço desde já!