GoにはPythonの複数行の文字列に似たものがあります。
"""line 1
line 2
line 3"""
そうでない場合、複数行にわたる文字列を書くための好ましい方法は何ですか?
言語の仕様によれば あなたは、文字列が二重引用符の代わりにバッククォートで区切られている生の文字列リテラルを使うことができます。
`line 1
line 2
line 3`
あなたは書ける:
"line 1" +
"line 2" +
"line 3"
これは以下と同じです。
"line 1line 2line3"
バックティックを使用するのとは異なり、エスケープ文字は保持されます。 「+」は「先行」行になければならないことに注意してください。
"line 1"
+"line 2"
エラーを生成します。
From 文字列リテラル :
\n
'のようにエスケープ文字を解釈します。ただし、複数行の文字列にバッククォート( `)を含める必要がある場合は、解釈済み文字列リテラルを使用する必要があります。
`line one
line two ` +
"`" + `line three
line four`
生の文字列リテラル( `` xx\
)にバッククォート( `)を直接入れることはできません。
使用する必要があります(「 バッククォートをバッククォート文字列に配置する方法? 」を参照)。
+ "`" + ...
複数行の文字列には生の文字列リテラルを使用してください。
func main(){
multiline := `line
by line
and line
after line`
}
生の文字列リテラルは、
foo
のように、バッククォートの間の文字シーケンスです。引用符の中には、逆引用符以外の文字が表示されることがあります。
重要なのは、 raw literalが複数行だけではなく、複数行になることだけが目的ではないということです。
生の文字列リテラルの値は、引用符の間の未解釈の(暗黙のうちに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
}
バックティックを使うと、複数行の文字列を持つことができます。
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)
}
二重引用符(“)または一重引用符( ´)を使用する代わりに、代わりにバックティックを使用して文字列の開始と終了を定義します。その後、それを行にまたがって折り返すことができます。
ただし、文字列をインデントする場合は、空白が重要になります。
遊び場 をチェックして実験してください。
次のように、コンテンツをその周りに ``で囲むことができます。
var hi = `I am here,
hello,
`
書式設定と行間を気にする必要があります。すべてが重要で、ここでの作業例です。 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)
}
生のリテラルを使うことができます。例
s:=`stack
overflow`
私にとって、これは\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.
`