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

String 如何在Go中编写多行字符串?,string,go,multiline,String,Go,Multiline,Go是否有类似于Python的多行字符串: 第1行 第2行 第3行“ 如果没有,那么编写跨多行字符串的首选方法是什么?根据,您可以使用原始字符串文字,其中字符串由反勾号而不是双引号分隔 `line 1 line 2 line 3` 你可以写: "line 1" + "line 2" + "line 3" 这与: "line 1line 2line 3" 与使用反勾号不同,它将保留转义字符。请注意,“+”必须位

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

第1行 第2行 第3行“ 如果没有,那么编写跨多行字符串的首选方法是什么?

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

`line 1
line 2
line 3`
你可以写:

"line 1" +
"line 2" +
"line 3"
这与:

"line 1line 2line 3"
与使用反勾号不同,它将保留转义字符。请注意,“+”必须位于“前导”行-例如,以下内容将生成错误:

"line 1"
+"line 2"
发件人:

  • 原始字符串文字支持多行(但不解释转义字符)
  • 解释字符串文字解释转义字符,如“
    \n
但是,如果多行字符串必须包含反引号(`),则必须使用解释字符串文字:

`line one
  line two ` +
"`" + `line three
line four`
不能直接在原始字符串文本(`xx
\
)中添加反引号(`)。
您必须使用(如“”中所述):


你可以在它周围放上``之类的内容

var hi = `I am here,
hello,
`

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

func main(){
    multiline := `line 
by line
and line
after line`
}
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)
}
生字符串 原始字符串文字是反引号之间的字符序列,如
`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
}

在围棋中,你必须非常小心格式和行距,一切都很重要,这是一个工作示例,试试看

您可以使用原始文本。 范例

Go和多行字符串 使用反勾号可以有多行字符串:

func main(){
    multiline := `line 
by line
and line
after line`
}
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)
}
与其使用双引号(“)或单引号符号(”),不如使用反勾号来定义字符串的开头和结尾。然后可以将其换行

如果缩进字符串,请记住空格将 伯爵


请检查并使用它进行实验。

对于我来说,如果添加
\n
不是问题,我将使用此选项

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.
             `
对我来说,我需要使用严重的重音/反引号,只需编写一个简单的测试

+ "`" + ...
它既丑陋又不方便


因此,我以一个字符为例:作为旁注:“原始引号”并不解析转义序列。因此,选择字符串文字来编写正则表达式模式,因为它们通常包含非标准转义序列,这会让Go编译器抱怨没有双重转义。它保持了模式的干净和安全相对可读。但在使用结束行空格时需要注意这一点。例如,如果在
第1行
后放置空格,它将在编辑器中不可见,但会出现在字符串中。@Danield这有点不必要,但哪种方言?可能主要是MySQL?请注意,通过扩展相同的参数,这对e来说是一个难题mbedding markdown或shell脚本(如果您选择使用backtick来代替
$(abcd)
)。@kylehuton:大概Daniele D在他/她的SQL查询中使用backtick字符(就像MySQL用户经常做的那样),并且发现必须将其表示为“+”很痛苦+`并中断复制和可访问性。如果人们对MySQL的这一点有问题,请注意,您可以始终设置会话sql模式,例如
set session sql_mode='ANSI_QUOTES';
视为标识符引号字符(如反勾引号字符)而不是作为字符串引号字符。
然后确保对字符串文本使用撇号
,我见过的每个SQL数据库都会这样做。请看,此解决方案与Python的多行字符串不同。它将字符串文本拆分为多行,但字符串本身不包含多行。因为对于转义字符,可以简单地用
\n
添加新行,并且更容易处理动态字符串等。如果我是正确的,公认的答案实际上是代码中的静态字符串,以使其看起来漂亮。这不是也很低效吗?让字符串是6个字符序列的3倍:6+2*6+3*6=36个字符分配给hen optimal应该是18(因为字符串是不可变的,每次添加两个字符串时,都会创建一个新字符串,两个字符串的长度将连接起来)。@N0thing:如果只有字符串文本,则编译器将优化时不会有运行时差异。但是有一个小的差异(微秒,甚至纳秒)编译时的差异。我相信这是使用CRLF line endingsRef获得多行字符串文字的最佳方法
+ "`" + ...