Основы строк


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.