Avatar ·

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

Acabei de começar a estudar Go e me deparei com uma coisa estranha — o tipo `rune`. Parece ser um número inteiro, mas por que um tipo separado? Estou tentando trabalhar com strings e notei que quando pego um caractere pelo índice, recebo números estranhos, não letras. Aqui está um exemplo que me confundiu: ```go package main import "fmt" func main() { s := "Привет, мир!" fmt.Println(s[0]) // Imprime 208, não 'П' fmt.Println(string(s[0])) // Imprime 'Ð', não 'П' } ``` Por que isso acontece? Eu esperava que `s[0]` me desse o primeiro caractere da string. Mas em vez disso, recebo algum lixo. Li que preciso usar `rune`, mas não entendo como exatamente. Tentei assim: ```go r := []rune(s) fmt.Println(string(r[0])) // Agora imprime 'П' ``` Isso funciona, mas não entendo por quê. O que é `rune` na verdade? É apenas `int32`? Ou é algo diferente? Para que serve esse tipo, se posso usar bytes? Explique, por favor, como funcionam strings, bytes e runes em Go.