Как вы пишете многострочные строки в Go? - PullRequest
532 голосов
/ 28 октября 2011

Есть ли в Go что-нибудь похожее на многострочные строки Python:

"""line 1
line 2
line 3"""

Если нет, какой способ записи строк занимает несколько строк?

Ответы [ 8 ]

866 голосов
/ 28 октября 2011

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

`line 1
line 2
line 3`
94 голосов
/ 02 декабря 2011

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

"line 1" +
"line 2" +
"line 3"

, что совпадает с:

"line 1line 2line3"

В отличие от использования обратных тиков, оно сохранит escape-символы.Обратите внимание, что «+» должно быть в «ведущей» строке, т. Е .:

"line 1"
+"line 2"

генерирует ошибку.

34 голосов
/ 13 февраля 2014

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

  • Необработанный строковый литерал поддерживает многострочный (но экранированные символы не интерпретируются)
  • интерпретируемый строковый литерал интерпретирует экранированные символы, например '\n'.

Но, если ваша многострочная строка должна содержать обратную кавычку (`), вам придется использовать интерпретируемый строковый литерал:

`line one
  line two ` +
"`" + `line three
line four`

Вы не можете напрямую поместить кавычку (`) в необработанный строковый литерал (` `xx \).
Вы должны использовать (как объяснено в ", как поместить обратную кавычку в строку с кавычками? "):

 + "`" + ...
23 голосов
/ 29 января 2017

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

func main(){
    multiline := `line 
by line
and line
after line`
}

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

Необработанные строковые литералы представляют собой последовательности символов между обратными кавычками, как в `foo`.В кавычках может появляться любой символ, кроме обратной кавычки.

Значительная часть состоит в том, что raw литерал не просто многострочный, и быть многострочным не является единственнымЦель этого.

Значение необработанного строкового литерала - это строка, состоящая из неинтерпретированных (неявно кодированных в UTF-8) символов между кавычками;в частности, обратная косая черта не имеет особого значения ...

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

func main(){
    multiline := `line 
by line \n
and line \n
after line`

    // \n will be just printed. 
    // But new lines are there too.
    fmt.Print(multiline)
}

Конкатенация

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

func main(){
    multiline := "line " +
            "by line " +
            "and line " +
            "after line"

    fmt.Print(multiline) // No new lines here
}

Так как "" интерпретируется, строковые литералы будут интерпретироваться.

func main(){
    multiline := "line " +
            "by line \n" +
            "and line \n" +
            "after line"

    fmt.Print(multiline) // New lines as interpreted \n
}
7 голосов
/ 05 ноября 2018

Go и многострочные строки

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

package main

import "fmt"

func main() {

    message := `This is a 
Multi-line Text String
Because it uses the raw-string back ticks 
instead of quotes.
`

    fmt.Printf("%s", message)
}

Вместо использования символов двойной кавычки («) или одинарных кавычек (‘), используйте обратные галочки для определения начала и конца строки. Затем вы можете обернуть его через строки.

Если вы отступите строку, помните, что пробел сосчитать.

Пожалуйста, проверьте игровую площадку и проведите с ней эксперименты.

4 голосов
/ 24 апреля 2016

Вы можете поместить контент с `` вокруг него, как

var hi = `I am here,
hello,
`
3 голосов
/ 30 июня 2017

Вы должны быть очень осторожны с форматированием и межстрочным интервалом в go, все имеет значение, и вот рабочий пример, попробуйте https://play.golang.org/p/c0zeXKYlmF

package main

import "fmt"

func main() {
    testLine := `This is a test line 1
This is a test line 2`
    fmt.Println(testLine)
}
1 голос
/ 24 сентября 2018

вы можете использовать необработанные литералы.Пример

s:=`stack
overflow`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...