Ответ
В Go строка — это последовательность байт, но каждый символ (руна) может занимать от 1 до 4 байт в зависимости от Unicode. Для ASCII-символов — 1 байт, кириллица — 2 байта, некоторые эмодзи — 4 байта.
Пример:
s := "Привет, 世界! 😊"
for _, r := range s {
fmt.Printf("%c: %d байтn", r, utf8.RuneLen(r))
}
Вывод:
П: 2 байт
р: 2 байт
и: 2 байт
в: 2 байт
е: 2 байт
т: 2 байт
,: 1 байт
: 1 байт
世: 3 байт
界: 3 байт
!: 1 байт
: 1 байт
😊: 4 байт