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, \U00000041Raw strings `...` — без обработки escape-последовательностей
✅ Редко используемые: \r, \b, \f, \v

Ключевое правило:

"..." — интерпретирует escape-последовательности
`...` — игнорирует escape-последовательности (кроме самих `)

Практические сценарии:

// Табличный вывод
"Name\tAge\tCity"

// Пути Windows
`C:\Users\Name` или "C:\\Users\\Name"

// Кавычки
"Он сказал: \"Привет\""

// Unicode
"\u2764 Love"  // ❤ Love