¿Qué es un rune en Go y en qué se diferencia de un byte normal?
Acabo de empezar a estudiar Go y me encontré con una cosa extraña: el tipo `rune`. Parece ser un número entero, pero ¿por qué entonces un tipo separado? Estoy intentando trabajar con strings y noté que cuando tomo un carácter por índice, obtengo números extraños, no letras.
Aquí hay un ejemplo que me confundió:
```go
package main
import "fmt"
func main() {
s := "Привет, мир!"
fmt.Println(s[0]) // Muestra 208, no 'П'
fmt.Println(string(s[0])) // Muestra 'Ð', no 'П'
}
```
¿Por qué sucede esto? Esperaba que `s[0]` me diera el primer carácter del string. Pero en su lugar obtengo algo basura.
Leí que necesito usar `rune`, pero no entiendo cómo exactamente. Lo probé así:
```go
r := []rune(s)
fmt.Println(string(r[0])) // Ahora muestra 'П'
```
Esto funciona, pero no entiendo por qué. ¿Qué es realmente `rune`? ¿Es solo `int32`? ¿O es algo diferente? ¿Para qué sirve este tipo si se puede trabajar con bytes?
Expliquen, por favor, cómo funcionan los strings, bytes y runes en Go.