9

Как написать многострочные строки в Go?

6

Существует ли в Go что-то похожее на многострочные строки в Python:

"""строка 1
строка 2
строка 3"""

Если нет, то какой предпочтительный способ записи строк, занимающих несколько строк?

5 ответ(ов)

1

Вы можете записать:

"строка 1" +
"строка 2" +
"строка 3"

что эквивалентно:

"строка 1строка 2строка 3"

В отличие от использования обратных кавычек, это сохранит escape-символы. Обратите внимание, что знак "+" должен находиться на 'ведущей' строке — например, следующий код вызовет ошибку:

"строка 1"
+"строка 2"
0

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

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
}
0

Создание многострочной строки в Go на самом деле очень просто. Для этого используется символ обратной кавычки (`) при объявлении или присвоении значения вашей строки.

Вот пример кода:

package main

import (
    "fmt"
)

func main() {
    // Строка с несколькими строками
    str := `Это многострочная
строка.`
    fmt.Println(str + "\n")
    
    // Многострочная строка с табуляцией
    tabs := `Эта строка
        будет иметь
        табуляцию`
    fmt.Println(tabs)
}

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

0

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

func multiline(parts ...string) string {
    return strings.Join(parts, "\n")
}

Вот как его использовать:

multiline(
  "это",
  "многострочный",
  "текст",
),

Он генерирует:

"это\nмногострочный\nтекст"

по сути

Это
многострочный
текст

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

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

// С обратными кавычками
aYmlList := `- имя: Джон
  фамилия: Доу
- имя: Джон
  фамилия: МаКлейн`

// С методом multiline
aYmlList := multiline(
  "- имя: Джон",
  "  фамилия: Доу",
  "- имя: Джон",
  "  фамилия: МаКлейн",
)

Таким образом, решение с использованием метода multiline делает код более структурированным и читаемым.

0

Вы можете обернуть содержимое в обратные кавычки (`), например:

var hi = `Я здесь,
привет,
`

Таким образом, вы можете использовать многострочные строки в JavaScript.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь