Как написать многострочные строки в Go?
Существует ли в Go что-то похожее на многострочные строки в Python:
"""строка 1
строка 2
строка 3"""
Если нет, то какой предпочтительный способ записи строк, занимающих несколько строк?
5 ответ(ов)
Вы можете записать:
"строка 1" +
"строка 2" +
"строка 3"
что эквивалентно:
"строка 1строка 2строка 3"
В отличие от использования обратных кавычек, это сохранит escape-символы. Обратите внимание, что знак "+" должен находиться на 'ведущей' строке — например, следующий код вызовет ошибку:
"строка 1"
+"строка 2"
Используйте необработанные строковые литералы для многострочных строк:
func main() {
multiline := `line
by line
and line
after line`
}
Необработанные строковые литералы
Необработанные строковые литералы — это последовательности символов, заключенные в обратные кавычки, как в foo
. Внутри кавычек может находиться любой символ, кроме обратной кавычки.
Важно отметить, что это именно необработанный литерал, а не просто многострочная строка, и быть многострочной — не единственная его цель.
Значение необработанного строкового литерала — это строка, составленная из не интерпретированных (вImplicitly UTF-8-кодированных) символов между кавычками; в частности, обратные слэши не имеют специального значения...
Таким образом, экранирование не будет интерпретировано, и новые строки между обратными кавычками будут считаться реальными новыми строками.
func main() {
multiline := `line
by line \n
and line \n
after line`
// \n просто будет напечатан.
// Но новые строки тоже присутствуют.
fmt.Print(multiline)
}
Конкатенация
Возможно, у вас есть длинная строка, которую вы хотите разбить, и вам не нужны новые строки в ней. В этом случае вы можете использовать конкатенацию строк.
func main() {
multiline := "line " +
"by line " +
"and line " +
"after line"
fmt.Print(multiline) // Новых строк здесь нет
}
Поскольку " " — это интерпретируемый строковый литерал, экранирование будет интерпретировано.
func main() {
multiline := "line " +
"by line \n" +
"and line \n" +
"after line"
fmt.Print(multiline) // Новые строки из интерпретированного \n
}
Создание многострочной строки в Go на самом деле очень просто. Для этого используется символ обратной кавычки (`) при объявлении или присвоении значения вашей строки.
Вот пример кода:
package main
import (
"fmt"
)
func main() {
// Строка с несколькими строками
str := `Это многострочная
строка.`
fmt.Println(str + "\n")
// Многострочная строка с табуляцией
tabs := `Эта строка
будет иметь
табуляцию`
fmt.Println(tabs)
}
Как видно из примера, строки, заключенные в обратные кавычки, поддерживают многострочный формат и сохраняют пробелы и табуляции, что делает их удобными для работы с многострочными текстами.
Для тех случаев, когда читаемость важнее производительности, я бы предложил этот простой метод:
func multiline(parts ...string) string {
return strings.Join(parts, "\n")
}
Вот как его использовать:
multiline(
"это",
"многострочный",
"текст",
),
Он генерирует:
"это\nмногострочный\nтекст"
по сути
Это
многострочный
текст
Почему мне это нравится больше, чем использование обратных кавычек?
Потому что вы можете поддерживать выравнивание и легкость чтения:
// С обратными кавычками
aYmlList := `- имя: Джон
фамилия: Доу
- имя: Джон
фамилия: МаКлейн`
// С методом multiline
aYmlList := multiline(
"- имя: Джон",
" фамилия: Доу",
"- имя: Джон",
" фамилия: МаКлейн",
)
Таким образом, решение с использованием метода multiline
делает код более структурированным и читаемым.
Вы можете обернуть содержимое в обратные кавычки (`
), например:
var hi = `Я здесь,
привет,
`
Таким образом, вы можете использовать многострочные строки в JavaScript.
Как присвоить многострочную строку переменной?
Как эффективно объединять строки в Go
Почему сравнение строк с помощью '==' и 'is' иногда дает разные результаты?
Как проверить, содержит ли строка подстроку?
Функции startsWith() и endsWith() в PHP