web-dev-qa-db-ja.com

Goで複数行の文字列をどのように書きますか?

GoにはPythonの複数行の文字列に似たものがあります。

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

そうでない場合、複数行にわたる文字列を書くための好ましい方法は何ですか?

512
aeter

言語の仕様によれば あなたは、文字列が二重引用符の代わりにバッククォートで区切られている生の文字列リテラルを使うことができます。

`line 1
line 2
line 3`
831
Mark Byers

あなたは書ける:

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

これは以下と同じです。

"line 1line 2line3"

バックティックを使用するのとは異なり、エスケープ文字は保持されます。 「+」は「先行」行になければならないことに注意してください。

"line 1"
+"line 2"

エラーを生成します。

90

From 文字列リテラル

  • 生の文字列リテラルは複数行をサポートします(ただしエスケープ文字は解釈されません)。
  • 解釈された文字列リテラルは '\n'のようにエスケープ文字を解釈します。

ただし、複数行の文字列にバッククォート( `)を含める必要がある場合は、解釈済み文字列リテラルを使用する必要があります。

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

生の文字列リテラル( `` xx\)にバッククォート( `)を直接入れることはできません。
使用する必要があります(「 バッククォートをバッククォート文字列に配置する方法? 」を参照)。

 + "`" + ...
33
VonC

複数行の文字列には生の文字列リテラルを使用してください。

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
}
21
I159

複数行の文字列

バックティックを使うと、複数行の文字列を持つことができます。

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

二重引用符(“)または一重引用符( ´)を使用する代わりに、代わりにバックティックを使用して文字列の開始と終了を定義します。その後、それを行にまたがって折り返すことができます。

ただし、文字列をインデントする場合は、空白が重要になります。

遊び場 をチェックして実験してください。

6
ASHWIN RAJEEV

次のように、コンテンツをその周りに ``で囲むことができます。

var hi = `I am here,
hello,
`
4
liam

書式設定と行間を気にする必要があります。すべてが重要で、ここでの作業例です。 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)
}
3
David

生のリテラルを使うことができます。例

s:=`stack
overflow`
1
Prabesh P

私にとって、これは\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.
             `
0
Ofonime Francis