你如何在Go中编写多行字符串?

时间:2011-10-28 18:44:35

标签: string go multiline

Go是否与Python的多行字符串类似:

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

如果没有,编写跨越多行的字符串的首选方法是什么?

10 个答案:

答案 0 :(得分:839)

根据language specification,您可以使用原始字符串文字,其中字符串由反引号而不是双引号分隔。

`line 1
line 2
line 3`

答案 1 :(得分:92)

你可以写:

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

与:

相同
"line 1line 2line3"

与使用后退标记不同,它将保留转义字符。请注意,“+”必须位于“前导”行,即:

"line 1"
+"line 2"

生成错误。

答案 2 :(得分:34)

来自String literals

  • 原始字符串文字支持多行(但不解释转义字符)
  • 解释字符串文字解释转义字符,例如“\n”。

但是,如果您的多行字符串必须包含反引号(`),那么您将不得不使用解释的字符串文字:

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

你不能直接将反引号(`)放在原始字符串文字中(``xx \)。
您必须使用(如“how to put a backquote in a backquoted string?”中所述):

 + "`" + ...

答案 3 :(得分:22)

对多行字符串使用原始字符串文字:

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

原始字符串文字

  

原始字符串文字是后引号之间的字符序列,如foo中所示。在引号内,除反向引号外,任何字符都可能出现。

一个重要的部分是原始字面不仅仅是多行而且多行不是它的唯一目的。

  

原始字符串文字的值是由引号之间的未解释(隐式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
}

答案 4 :(得分:6)

转到多行字符串

使用倒勾可以包含多行字符串:

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

不要使用双引号(“)或单引号('),而应使用反引号定义字符串的开始和结束。然后,您可以将其跨行包装。

  

如果您缩进字符串,请记住空格将   计数。

请检查playground 并进行实验。

答案 5 :(得分:4)

您可以在其周围添加“`,例如

var hi = `I am here,
hello,
`

答案 6 :(得分:3)

你必须非常小心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)
}

答案 7 :(得分:1)

您可以使用原始文字。 例子

s:=`stack
overflow`

答案 8 :(得分:0)

对我来说,如果添加\n没问题,这就是我要使用的。

fmt.Sprintf("Hello World\nHow are you doing today\nHope all is well with your go\nAnd code")

否则,您可以使用raw string

multiline := `Hello Brothers and sisters of the Code
              The grail needs us.
             `

答案 9 :(得分:-1)

对我来说,我需要使用 ` 重音符/反引号 并且只写一个简单的测试

+ "`" + ...

又丑又不方便

所以我取一个字符例如:? U+1F42C来替换它


演示

myLongData := `line1
line2 ?aaa?
line3
` // maybe you can use IDE to help you replace all ` to ?
myLongData = strings.ReplaceAll(myLongData, "?", "`")

Go Playground