Основы Go
Теория: Строки
В Go строки представлены типом string. Это неизменяемая последовательность байт, закодированных в UTF-8. Строки — один из самых часто используемых типов данных, особенно при работе с текстами, запросами, HTTP и файловыми путями.
Строки можно объявлять двумя способами
Обычные строки записываются в двойных кавычках. Но если строка многострочная или содержит спецсимволы (например, \n или кавычки), её удобнее оформлять в сырых литералах — через обратные кавычки:
В таких строках сохраняются все отступы, переносы и символы как есть, без экранирования.
Конкатенация
Объединить строки можно с помощью оператора +:
Go поддерживает сокращенный синтаксис конкатенации строк если используются переменные:
Конкатенация возможна только между значениями типа string. Смешивание типов приведёт к ошибке компиляции:
Преобразование чисел в строки
В 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]) возвращается байт, а не символ:
Чтобы получить символ, нужно преобразовать строку в срез (динамический массив) рун. Массивы и срез проходятся чуть дальше, но код имеет смысл посмотреть уже сейчас.
