Junior — Middle
Co przedstawia wynik wykonania operatora [] dla typu danych tekstowych?
sobes.tech AI
Odpowiedź od AI
W języku Go operator [] dla typu danych string służy do uzyskania wycinka bajtów z łańcucha lub pojedynczego bajtu według indeksu. Łańcuch w Go jest niezmienną sekwencją bajtów (UTF-8). Odwołując się do str[i], zwracany jest bajt typu byte (alias uint8), a nie znak w zwykłym sensie, ponieważ znaki Unicode mogą zajmować kilka bajtów.
Przykład:
s := "Привет"
fmt.Println(s[0]) // Wyświetli bajt odpowiadający pierwszej części znaku 'П'
fmt.Println(string(s[0])) // Wyświetli niepoprawny znak, ponieważ to nie jest pełny znak UTF-8
// Aby uzyskać znaki (rune), należy przekonwertować łańcuch na wycinek rune:
r := []rune(s)
fmt.Println(string(r[0])) // Wyświetli 'П'
W związku z tym operator [] dla łańcuchów zwraca bajt według indeksu, a nie znak Unicode.