it-swarm.com.de

Wie schreibt man mehrzeilige Strings in Go?

Hat Go etwas Ähnliches wie Pythons mehrzeilige Zeichenfolgen:

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

Wenn nicht, wie schreiben Sie Zeichenfolgen, die sich über mehrere Zeilen erstrecken?

543
aeter

Gemäß der Sprachspezifikation können Sie ein unformatiertes Zeichenfolgenliteral verwenden, bei dem die Zeichenfolge durch Backticks anstelle von Anführungszeichen begrenzt wird.

`line 1
line 2
line 3`
877
Mark Byers

Du kannst schreiben:

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

das ist das gleiche wie:

"line 1line 2line3"

Im Gegensatz zur Verwendung von Back Ticks werden Escape-Zeichen beibehalten. Beachten Sie, dass sich das "+" in der "führenden" Zeile befinden muss, d. H .:

"line 1"
+"line 2"

erzeugt einen Fehler.

97

From String literals :

  • unformatiertes String-Literal unterstützt mehrzeilige Zeichen (escape-Zeichen werden jedoch nicht interpretiert)
  • interpretiertes String-Literal interpretiert maskierte Zeichen wie '\n'.

Wenn Ihre mehrzeilige Zeichenfolge jedoch ein Backquote (`) enthalten muss, müssen Sie ein interpretiertes Zeichenfolgenliteral verwenden:

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

Sie können ein Backquote (`) nicht direkt in ein unformatiertes String-Literal (` `xx\) einfügen.
Sie müssen (wie in " wie setzt man ein Backquote in einen Backquoted-String? "):

 + "`" + ...
34
VonC

Verwenden Sie unformatierte Zeichenfolgenliterale für mehrzeilige Zeichenfolgen:

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

Rohe String-Literale

Rohe String-Literale sind Zeichenfolgen zwischen Anführungszeichen, wie in `foo`. Innerhalb der Anführungszeichen kann jedes Zeichen außer dem rückseitigen Anführungszeichen erscheinen.

Ein wesentlicher Teil ist, dass raw nicht nur mehrzeilig und mehrzeilig ist nicht der einzige Zweck.

Der Wert eines unformatierten Zeichenfolgenliteral ist die Zeichenfolge, die aus den nicht interpretierten (implizit UTF-8-codierten) Zeichen zwischen den Anführungszeichen besteht. Insbesondere haben Backslashes keine besondere Bedeutung ...

Escapezeichen werden also nicht interpretiert und neue Zeilen zwischen Ticks sind echte neue Zeilen.

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

Verkettung

Möglicherweise haben Sie eine lange Leitung, die Sie unterbrechen möchten, und Sie brauchen keine neuen Leitungen. In diesem Fall können Sie die Verkettung von Zeichenfolgen verwenden.

func main(){
    multiline := "line " +
            "by line " +
            "and line " +
            "after line"

    fmt.Print(multiline) // No new lines here
}

Da "" interpretiert wird, werden Zeichenketten-Escapezeichen interpretiert.

func main(){
    multiline := "line " +
            "by line \n" +
            "and line \n" +
            "after line"

    fmt.Print(multiline) // New lines as interpreted \n
}
23
I159

Gehen Sie und mehrzeilige Zeichenfolgen

Mit Back Ticks können Sie mehrzeilige Zeichenfolgen erstellen:

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

Verwenden Sie statt der doppelten Anführungszeichen (") oder einfachen Anführungszeichen (") Back-Ticks, um den Anfang und das Ende der Zeichenfolge zu definieren. Sie können es dann über Zeilen umbrechen.

Wenn Sie die Zeichenfolge jedoch einrücken, denken Sie daran, dass der Leerraum zählt.

Bitte überprüfen Sie die Spielplatz und experimentieren Sie damit.

7
ASHWIN RAJEEV

Sie können Inhalte mit `` wie setzen

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

Sie müssen sehr vorsichtig mit der Formatierung und dem Zeilenabstand umgehen, alles zählt und hier ist ein funktionierendes Beispiel, probieren Sie es aus 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

sie können rohe Literale verwenden. Beispiel

s:=`stack
overflow`
1
Prabesh P

Für mich ist das, was ich benutze, wenn das Hinzufügen von \n kein Problem ist.

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

Ansonsten kannst du den raw string benutzen

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