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

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

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


当前回答

你可以在内容周围加上“”,比如

var hi = `I am here,
hello,
`

其他回答

可以使用原始文字。实例

s:=`stack
overflow`

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

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
}

根据语言规范,可以使用原始字符串文本,其中字符串由反引号而不是双引号分隔。

`line 1
line 2
line 3`

对我来说,如果添加不成问题,这就是我使用的方法。

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

否则,可以使用原始字符串

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

你可以写:

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

其与:

"line 1line 2line 3"

与使用反引号不同,它将保留转义字符。请注意,“+”必须在“前导”行上-例如,以下内容将生成错误:

"line 1"
+"line 2"