Вопрос проверяет понимание того, как Go представляет строки и как это влияет на работу с текстом, включая Unicode.
В Go строки — это неизменяемые последовательности байтов. Это означает, что строка может содержать любые байты, включая нулевые. Однако, по соглашению и для удобства работы с текстом, Go активно поддерживает кодировку UTF-8. Исходный код Go сам по себе является UTF-8, и строковые литералы по умолчанию интерпретируются как UTF-8.
Для работы с отдельными символами Go предоставляет два типа:
При итерации по строке с помощью цикла for i := 0; i < len(s); i++ вы получаете байты. Для итерации по рунам (символам) используется for i, r := range s.
package main
import "fmt"
func main() {
s := "Привет, мир!"
fmt.Println("Длина в байтах:", len(s)) // 21 байт
// Итерация по байтам
for i := 0; i < len(s); i++ {
fmt.Printf("%x ", s[i])
}
fmt.Println()
// Итерация по рунам
for i, r := range s {
fmt.Printf("Позиция %d: %c (U+%04X)\n", i, r, r)
}
}Понимание того, что строки в Go — это байтовые последовательности с поддержкой UTF-8, критично для корректной обработки текста, особенно при работе с многоязычными данными. Используйте тип rune и цикл for range для безопасной работы с Unicode-символами.