Extração de substring em Go: como obter parte de uma string por índices?
Não use slicing de bytes para strings Unicode!
Olá! Comecei a estudar Go recentemente e me deparei com um problema ao trabalhar com strings. Em outras linguagens (como Python ou JavaScript), estou acostumado a fazer algo como str[1:4] para obter uma substring. Em Go, tentei uma sintaxe similar, mas não obtive o que esperava.
Aqui está meu código:
package main
import "fmt"
func main() {
str := "Привет, мир!"
sub := str[1:4]
fmt.Println(sub) // Esperava: "рив", mas recebo algo estranho
}
Em vez de "рив", vejo alguns caracteres corrompidos. Li que Go usa UTF-8, mas não entendo como isso afeta a extração de substrings. Também tentei trabalhar com uma string ASCII:
str := "Hello, World!"
sub := str[1:4]
fmt.Println(sub) // Exibe "ell" — funciona!
Por que surgem problemas com o cirílico? Como extrair substrings corretamente de strings que contêm caracteres Unicode (letras russas, emojis, etc.)? Preciso de uma maneira confiável que funcione para qualquer string. Desde já, obrigado!