Основы строк
1. Что такое строка
- Строка в Go — неизменяемая последовательность байт, хранимая в кодировке UTF-8 по умолчанию.
- Тип данных:
string.
text1 := "Hello, World!"
text2 := "Привет, мир!"
fmt.Printf("text1: %s\n", text1)
fmt.Printf("text2: %s\n", text2)
Кириллица и другие Unicode-символы корректно поддерживаются, но требуют аккуратности при работе по байтам.
2. Обычные строковые литералы ("...")
- Записываются в двойных кавычках.
- Поддерживают escape-последовательности:
\n— новая строка\t— табуляция\"— кавычка внутри строки\\— обратный слэш и т.д.
s := "Первая строка\nВторая строка\t(с табом)"
fmt.Println(s)
В таком виде \n и \t интерпретируются, а не выводятся как текст.
3. Сырые строковые литералы (raw strings, `...`)
- Записываются в обратных кавычках
`...`. - Не интерпретируют escape-последовательности:
\n,\t,\\и т.п. считаются обычными символами. - Удобны для:
- многострочного текста,
- регулярных выражений,
- текстов, где много
\.
raw := `Это raw string.
Может быть многострочным.
Игнорирует \n и \t`
fmt.Printf("raw:\n%s\n", raw)
Здесь \n и \t попадут в строку как два символа \ и n / t, без перехода на новую строку или табуляции.
4. Сравнение " и `
- Если строка пустая, разницы нет:
empty1 := ""
empty2 := ``
fmt.Printf("empty1: %q (len=%d)\n", empty1, len(empty1))
fmt.Printf("empty2: %q (len=%d)\n", empty2, len(empty2))
- Разница появляется, когда внутри есть escape-последовательности или многострочный текст:
- В
"..."—\nдаёт перенос строки. - В
`...`—\nпросто два символа:\иn.
- В
5. Когда что использовать
"...":- обычные короткие строки;
- форматированные сообщения;
- когда нужны
\n,\tкак управление форматированием.
`...`:- многострочные блоки текста;
- строки с большим количеством обратных слэшей;
- когда нужно видеть строку «как есть», без интерпретации escape-последовательностей.
6. Ключевые тезисы
- Строка в Go — иммутабельная UTF-8-последовательность байт.
- Два вида литералов:
"..."— с поддержкой escape-последовательностей.`...`— «сырая» строка, без интерпретации.
- Различия между
""и`` проявляются только при наличии содержимого, особенно со спецсимволами и\n.