Sobes.tech
Назад к вопросам
Middle+
4

Особенности работы со строками в Go: неизменяемость, len(), работа с Unicode/кириллицей, руны?

Компании, где спрашивали
YadroYadro

Ответ от нейросети

sobes.tech AI

В Go строки (string) неизменяемы — после создания изменить отдельные байты нельзя. Это важно учитывать при работе с большими текстами.

Функция len() возвращает количество байт в строке, а не количество символов, что особенно важно для Unicode и кириллицы, где символы могут занимать несколько байт.

Для корректной работы с Unicode используют тип rune — это alias для int32, представляющий один Unicode-код по символу. Преобразование строки в срез рун позволяет работать с символами, а не байтами:

s := "Привет"
runes := []rune(s)
fmt.Println(len(s))      // количество байт
fmt.Println(len(runes))  // количество символов

Таким образом, для обработки кириллицы и других Unicode-символов нужно использовать руны, чтобы избежать ошибок при подсчёте длины или при индексировании.