Escape-последовательности в строках
1. Основные escape-последовательности
| Последовательность | Описание | Пример |
|---|---|---|
\n |
Перевод строки (новая строка) | "Hello\nWorld" |
\t |
Горизонтальная табуляция | "Name\tValue" |
\\ |
Обратная косая черта | "C:\\Users" |
\" |
Двойная кавычка | "He said \"Hi\"" |
\' |
Одинарная кавычка | 'It\'s' |
Наиболее часто используемые: \n, \t, \", \\.
2. Перевод строки \n
fmt.Println("первая\\nвторая") // Вывод: первая\nвторая
fmt.Println("первая\nвторая") // Вывод:
// первая
// вторая
\\n — выводит буквально \n (экранирование)
\n — создаёт новую строку
3. Табуляция \t
fmt.Println("имя\\tзначение") // Вывод: имя\tзначение
fmt.Println("имя\tзначение") // Вывод: имя значение
Применение: Выравнивание колонок в табличном выводе.
4. Экранирование кавычек
Двойные кавычки \"
fmt.Println("Он сказал: \"Привет\"")
// Вывод: Он сказал: "Привет"
Без экранирования — ошибка компиляции:
fmt.Println("Он сказал: "Привет"") // ❌ Синтаксическая ошибка
Одинарные кавычки \'
fmt.Println('\'') // Вывод символа '
Примечание: В Go одинарные кавычки используются для рун (rune), не строк.
5. Обратный слэш \\
fmt.Println("Путь: C:\\\\Users\\\\Name")
// Вывод: Путь: C:\Users\Name
Правило: Каждый \ требует экранирования как \\.
Альтернатива: raw string
fmt.Println(`Путь: C:\Users\Name`)
// Вывод: Путь: C:\Users\Name
Преимущество: Не нужно экранировать \ в обратных кавычках.
6. Редко используемые escape-последовательности
| Последовательность | Описание |
|---|---|
\r |
Возврат каретки (carriage return) |
\b |
Backspace (возврат на шаг) |
\f |
Перевод страницы (form feed) |
\v |
Вертикальная табуляция |
Примечание: Практически не применяются в современном коде.
7. Числовые коды символов
Восьмеричный код \ooo
fmt.Println("\101") // 'A' (код 65 в десятичной = 101 в восьмеричной)
fmt.Println("\141") // 'a' (код 97)
Формат: \ + до 3 восьмеричных цифр.
Шестнадцатеричный код \xhh
fmt.Println("\x41") // 'A' (код 65 = 0x41)
fmt.Println("\x48\x69") // "Hi"
Формат: \x + ровно 2 шестнадцатеричные цифры.
Unicode \uXXXX
fmt.Println("\u0041") // 'A' (U+0041)
fmt.Println("\u0410") // 'А' (кириллица, U+0410)
fmt.Println("\u263A") // '☺' (смайлик)
Формат: \u + ровно 4 шестнадцатеричные цифры (до U+FFFF).
Расширенный Unicode \UXXXXXXXX
fmt.Println("\U0001F600") // '😀' (эмодзи, U+1F600)
fmt.Println("\U00000041") // 'A'
Формат: \U + ровно 8 шестнадцатеричных цифр (любой Unicode).
8. Сравнение способов задания символов
// Все выводят 'A'
fmt.Println("A") // Литерал
fmt.Println("\101") // Восьмеричный
fmt.Println("\x41") // Hex
fmt.Println("\u0041") // Unicode (короткий)
fmt.Println("\U00000041") // Unicode (длинный)
9. Практические примеры
Форматирование вывода
fmt.Println("Имя\tВозраст\tГород")
fmt.Println("Alice\t30\tNY")
fmt.Println("Bob\t25\tLA")
Вывод:
Имя Возраст Город
Alice 30 NY
Bob 25 LA
Путь Windows
// Способ 1: с экранированием
path1 := "C:\\Program Files\\Go\\bin"
// Способ 2: raw string
path2 := `C:\Program Files\Go\bin`
fmt.Println(path1)
fmt.Println(path2)
// Оба выведут: C:\Program Files\Go\bin
Unicode символы
fmt.Println("Звёзды: \u2605 \u2606") // ★ ☆
fmt.Println("Эмодзи: \U0001F44D") // 👍
10. Итоги
✅ Основные escape: \n, \t, \\, \"
✅ \n — перевод строки, \t — табуляция
✅ \\ — экранирование обратного слэша
✅ \" — кавычки внутри строки
✅ Числовые коды: \101, \x41, \u0041, \U00000041
✅ Raw strings `...` — без обработки escape-последовательностей
✅ Редко используемые: \r, \b, \f, \v
Ключевое правило:
"..." — интерпретирует escape-последовательности
`...` — игнорирует escape-последовательности (кроме самих `)
Практические сценарии:
// Табличный вывод
"Name\tAge\tCity"
// Пути Windows
`C:\Users\Name` или "C:\\Users\\Name"
// Кавычки
"Он сказал: \"Привет\""
// Unicode
"\u2764 Love" // ❤ Love