Основы Go
2026-02-26 20:52 Diff

В Go строки представлены типом string. Это неизменяемая последовательность байт, закодированных в UTF-8. Строки — один из самых часто используемых типов данных, особенно при работе с текстами, запросами, HTTP и файловыми путями.

Строки можно объявлять двумя способами

Обычные строки записываются в двойных кавычках. Но если строка многострочная или содержит спецсимволы (например, \n или кавычки), её удобнее оформлять в сырых литералах — через обратные кавычки:

В таких строках сохраняются все отступы, переносы и символы как есть, без экранирования.

Конкатенация

Объединить строки можно с помощью оператора +:

Go поддерживает сокращенный синтаксис конкатенации строк если используются переменные:

Конкатенация возможна только между значениями типа string. Смешивание типов приведёт к ошибке компиляции:

Сравнение строк

Строки можно сравнивать операторами ==, !=, <, <=, >, >=. Сравнение происходит лексикографически по байтам UTF-8: строка сравнивается с другой слева направо до первого отличия. Длина влияет только в случае, когда одна строка является префиксом другой.

Преобразование чисел в строки

В Go числа не конвертируются в строки автоматически. Более того, выражение string(number) не преобразует число в его текстовое представление. Вместо этого число рассматривается как код Unicode, и результатом будет символ с этим кодом.

Например:

Чтобы получить строку с текстовым значением числа, нужно использовать пакет strconv:

Для чисел с плавающей точкой применяется strconv.FormatFloat, например:

Форматирование строк

Go не поддерживает интерполяцию строк напрямую. Вместо этого используется функция fmt.Sprintf(), которая работает по шаблону:

Длина строки

Для определения длины строки используется встроенная функция len():

Строки в Go — это последовательности байт, а не символов. Это важно, потому что один символ в UTF-8 (например, кириллический или emoji) может занимать 2, 3 или 4 байта. Например:

Чтобы корректно работать с символами, а не байтами, в Go есть специальный тип — rune. rune — это псевдоним для int32, который обозначает один юникод-символ. Поэтому если мы хотим посчитать количество символов, а не байт, то нам придется воспользоваться функцией utf8.RuneCountInString().

Обращение к символам

Строка в Go — это массив байт. Поэтому при обращении по индексу (s[i]) возвращается байт, а не символ:

Чтобы получить символ, нужно преобразовать строку в срез (динамический массив) рун. Массивы и срез проходятся чуть дальше, но код имеет смысл посмотреть уже сейчас.