920 Stimmen

Wie schreibt man mehrzeilige Strings in Go?

Hat Go etwas Ähnliches wie Pythons mehrzeilige Zeichenketten:

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

Wenn nicht, was ist die bevorzugte Art, Zeichenketten zu schreiben, die sich über mehrere Zeilen erstrecken?

1425voto

Mark Byers Punkte 761508

によると Sprachspezifikation können Sie ein rohes Zeichenfolgenliteral verwenden, bei dem die Zeichenfolge durch Backticks anstelle von doppelten Anführungszeichen abgegrenzt ist.

`line 1
line 2
line 3`

181voto

Sie können schreiben:

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

was dasselbe ist wie:

"line 1line 2line 3"

Anders als bei der Verwendung von Backticks bleiben dabei Escape-Zeichen erhalten. Beachten Sie, dass das "+" in der "führenden" Zeile stehen muss - das folgende Beispiel wird einen Fehler erzeugen:

"line 1"
+"line 2"

66voto

I159 Punkte 27156

Verwenden Sie rohe String-Literale für mehrzeilige Strings:

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 beliebige Zeichen stehen, mit Ausnahme der Anführungszeichen.

Ein wichtiger Teil ist, dass die roh buchstäblich nicht nur mehrzeilig und mehrzeilig zu sein ist nicht ihr einziger Zweck.

Der Wert eines Raw-String-Literal ist die Zeichenkette, die aus den uninterpretierten (implizit UTF-8-kodierten) Zeichen zwischen den Anführungszeichen besteht; insbesondere haben Backslashes keine besondere Bedeutung...

Escapes werden also nicht interpretiert und neue Linien zwischen den Zecken werden echte neue Linien sein .

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 Zeile, die Sie unterbrechen wollen, und Sie brauchen keine neuen Zeilen darin. In diesem Fall können Sie die String-Verkettung verwenden.

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

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

Da " " als Zeichenkettenliteral interpretiert wird, werden auch Escapes interpretiert.

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

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

48voto

VonC Punkte 1117238

から String-Literale :

  • raw string literal unterstützt mehrzeilige Zeichen (aber escapete Zeichen werden nicht interpretiert)
  • interpretierte Zeichenkettenliterale interpretieren escapete Zeichen, wie ' \n '.

Wenn Ihre mehrzeilige Zeichenkette jedoch ein Anführungszeichen (`) enthalten muss, dann müssen Sie ein interpretiertes Zeichenfolgenliteral verwenden:

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

Sie können ein Backquote (`) nicht direkt in ein rohes String-Literal (``xx \ ).
Sie müssen (wie in " Wie setzt man ein Anführungszeichen in eine in Anführungszeichen gesetzte Zeichenfolge? "):

 + "`" + ...

17voto

ASHWIN RAJEEV Punkte 1963

Go und mehrzeilige Zeichenketten

Mit Back Ticks können Sie mehrzeilige Zeichenketten 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)
}

Anstatt doppelte Anführungszeichen (") oder einfache Anführungszeichen (') zu verwenden, sollten Sie stattdessen Back-Ticks verwenden, um den Anfang und das Ende der Zeichenkette zu definieren. Sie können sie dann über Zeilen hinweg umbrechen.

Wenn Sie die Zeichenkette jedoch einrücken, denken Sie daran, dass das Leerzeichen zählt.

Bitte prüfen Sie die Spielplatz und Experimente damit machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X