Avatar ·

¿Cómo obtener un carácter de una cadena por índice en Go? (Problema con runas y bytes)

¡Hola a todos! Soy nuevo en Go y me encontré con un problema inesperado al trabajar con cadenas. Necesito obtener un carácter de una cadena por su índice, como solía hacer en otros lenguajes (por ejemplo, str[i] en Python o charAt(i) en Java).

Aquí está mi código:

package main

import "fmt"

func main() {
    str := "Привет, мир!"
    fmt.Println(str[0]) // Muestra 208, no 'П'
    fmt.Println(string(str[0])) // Muestra 'Ð', no 'П'
}

Esperaba que str[0] devolviera el primer carácter 'П', pero en su lugar obtengo números y caracteres extraños. ¿Por qué sucede esto? ¿Cómo obtener correctamente un carácter por índice en Go?

Intenté usar string(str[0]), pero tampoco funciona correctamente. Es especialmente extraño que para letras en inglés (por ejemplo, "Hello") todo funcione bien, pero con caracteres rusos comienzan los problemas.

Por favor, expliquen cómo indexar correctamente caracteres en cadenas de Go. ¿Qué estoy haciendo mal? ¿Hay alguna forma estándar de obtener un carácter por índice?