Tutorial

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

Published on January 24, 2020
Русский
Форматирование строк в Go

Строки часто состоят из текста, и нам нужно контролировать читаемость этих строк посредством пунктуации, разрывов строк и отступов.

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

Литерали строк

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

В простой программе Hello, World! литераль строки будет выглядеть как "Hello, World!", а значением строки будет Hello, World! без кавычек. Значение строки — это то, что мы видим в окне терминала после запуска программы Go.

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

Кавычки

В Go можно использовать одинарные кавычки (`) или двойные кавычки ("), поэтому мы можем легко вставлять цитаты в строку, выделяя их двойными кавычками, в то время как сама строка выделена одинарными кавычками:

`Sammy says, "Hello!"`

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

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

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

Важно помнить, что при использовании одинарных кавычек в Go создается чистая литераль строки, а при использовании двойных кавычек — интерпретированная литераль строки. Чтобы узнать больше о разнице между ними, ознакомьтесь с руководством Введение в работу со строками в Go.

Символы перехода

Также для форматирования строк используются символы перехода. Символы перехода интерпретируются кодом как наличие особого значения у следующего за ними символа. Символы перехода начинаются с обратной косой черты (\), за которой идет другой символ строки, в результате чего строка имеет определенный формат.

Далее приведен перечень нескольких распространенных символов перехода:

Символ перехода Формат
\\ Обратная косая черта
\" Двойные кавычки
\n Разрыв строки
\t Табуляция (горизонтальный отступ)

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

fmt.Println("Sammy says, \"Hello!\"")
Output
Sammy says, "Hello!"

С помощью символа перехода \" мы можем использовать двойные кавычки, чтобы заключить строку с текстом в двойные кавычки.

Символ перехода \n можно использовать для разрыва строк без нажатия клавиши Enter (Return):

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

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

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

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

Символы перехода используются для добавления в строки дополнительного форматирования, которого иным образом достичь сложно или невозможно. Без символов перехода вы не сможете построить строку Сэмми говорит: "Мне нравится использовать пакет `fmt`".

Многострочная печать

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

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

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

Если вы распечатаете этот текст, вы увидите, что символ возврата имеется в начале и в конце строки:

Output
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."

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

Чистые литерали строк

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

Чистая литераль строки указывает Go игнорировать все форматирование строки, включая символы перехода.

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

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

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

Заключение

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

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products


About the authors


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel