Avatar ·

¿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.