Сколько байт занимает каждый символ строки

«Сколько байт занимает каждый символ строки» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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 байт