Форматирование строк в Go

Строки часто представляют собой текст, а потому во многих случаях может потребоваться больший контроль над тем, как они выглядят – ведь удобочитаемость текста зависит от знаков препинания, разрывов строк и отступов.

В этом мануале мы рассмотрим некоторые способы форматирования строк в Go, благодаря чему весь выводимый текст будет выглядеть правильно.

Строковые литералы

Давайте сначала разберемся, в чем различие между строковым литералом и строковым значением. Строковый литерал – это то, что мы видим в исходном коде компьютерной программы, включая кавычки. Строковое значение – это то, что мы видим, когда вызываем функцию fmt.Println и запускаем программу.

Например, в программе «Hello, World!» есть строковый литерал «Hello, World!» и строковое значение Hello, World!. По сути, строковое значение – это то, что мы видим в выводе программы Go в терминале.

Читайте также: Написание простой программы Go

Но некоторые строковые значения могут включать кавычки, например, когда вы используете какую-то цитату. Поскольку строковые литералы и строковые значения – не одно и то же, строковые литералы часто необходимо дополнительно форматировать, чтобы строковые значения отображались так, как нужно.

Кавычки

В Go можно использовать обратные и двойные кавычки, а потому вставить кавычки в строку достаточно просто – можно использовать двойные кавычки в строке, заключенной в обратные кавычки:

`Bobby says, "Hello!"`

Или же можно использовать обратные кавычки внутри строки, а саму строку заключить в двойные кавычки:

"Bobby likes the `fmt` package for formatting strings.."

Комбинируя обратные и двойные кавычки, вы можете контролировать отображение кавычек в строках.

Важно помнить, что обратные кавычки в Go создают необработанный строковый литерал (raw), а двойные кавычки создают интерпретируемый строковый литерал (interpreted). Чтобы узнать больше, прочитайте этот мануал.

Escape-символы

Еще один способ форматирования строк – использование escape-символа. Такие символы указывают, что следующий символ имеет особое значение. Все escape-символы начинаются с обратного слеша (\). Он сочетается с другим символом в строке, чтобы отформатировать данную строку определенным образом.

Вот список нескольких самых распространенных escape-символов:

Escape-символ Форматирование
\\ Бэкслэш
Двойные кавычки
\n Разрыв строки
\t Табуляция (горизонтальный отступ)

Используйте escape-символ, чтобы добавить кавычки в приведенный ниже пример. Обратите внимание, это позволяет вам использовать двойные кавычки как для обозначения строки, так и внутри строки.

fmt.Println("Bobby says, \"Hello!\"")
Bobby says, "Hello!"

Escape-символ \n можно использовать, чтобы разбить строки, не нажимая Enter или Return:

fmt.Println("This string\nspans multiple\nlines.")
This string
spans multiple
lines.

Также можно комбинировать escape-символы. Попробуйте вывести многострочную строку и включить интервалы в списке, например:

fmt.Println("1.\tShark\n2.\tShrimp\n10.\tSquid")
1.    Shark
2.    Shrimp
10.   Squid

Горизонтальный отступ, который выполняет escape-символ \t, выравнивает второй столбец в этом примере, благодаря чему вывод очень удобно читать.

Escape-символы используются для дополнительного форматирования сложных строк. Без escape-символов, например, нельзя было бы создать такую строку:

Bobby says, "I like to use the `fmt` package".

Многострочные строки

Вывод в несколько строк может сделать текст более читабельным. Многострочные строки могут быть сгруппированы в чистый и упорядоченный текст, отформатированы как буквы или использованы для разбиения стихов или текстов песен.

Чтобы создать многострочную строку, заключите ее в обратные кавычки. Имейте в виду: это создает необработанный строковый литерал.

`
This string is on
multiple lines
within three single
quotes on either side.
`

В терминале строка будет отображаться с пустыми строками в начале и в конце:


This string is on
multiple lines
within three single
quotes on either side.



Чтобы этого избежать, нужно поместить первую строку сразу после открывающей кавычки, а закрывающую кавычку поместить сразу после окончания строки.

`This string is on
multiple lines
within three single
quotes on either side.`

Если вам нужно создать интерпретируемый строковый литерал, это можно сделать с помощью двойных кавычек и оператора +, но вам нужно будет самостоятельно вставить разрывы строк.

"This string is on\n" +
"multiple lines\n" +
"within three single\n" +
"quotes on either side."

Обратные кавычки могут упростить восприятие длинного текста. Но если вам нужен интерпретируемый строковый литерал, вам нужно использовать двойные кавычки.

Необработанные строковые литералы

Что если какие-то строки не нуждаются в специальном форматировании? Например, если вам нужно сравнить или оценить строки компьютерного кода, в которых обратный слеш используется буквально, а не в качестве escape-символа, вам нужно сообщить об этом Go. Как это сделать?

Для этого нужен необработанный строковый литерал – он говорит Go игнорировать все форматирование в строке, включая escape-символы.

Попробуйте создать необработанную строку, используя обратные кавычки:

fmt.Println(`Bobby says,\"The balloon\'s color is red.\"`)
Bobby says,\"The balloon\'s color is red.\"

Создавая необработанную строку с помощью обратных кавычек, вы можете сохранить обратные слеши и другие символы, которые используются в качестве escape-символов.

Заключение

В этом вы узнали несколько способов форматирования текста в Go, а также научились работать со строками. Такие методы, как escape-символы или необработанные литералы, помогают правильно отобразить строки программы на экране, чтобы конечный пользователь мог легко прочитать весь текст.

Tags: