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.