Entsprechend der Sprachspezifikation können Sie ein Rohzeichenfolgenliteral verwenden, bei dem die Zeichenfolge durch Backticks anstelle von doppelten Anführungszeichen begrenzt wird.
Als Randnotiz: Das so genannte "rohe Zitat" analysiert keine Escape-Sequenzen. Es ist daher das Zeichenfolgenliteral der Wahl, Muster für reguläre Ausdrücke zu schreiben, da diese normalerweise nicht standardmäßige Escape-Sequenzen enthalten, die den Go-Compiler dazu bringen würden, sich über nicht doppelt maskierte zu beschweren. Es hält die Muster sauber und relativ lesbar.
Jimt
10
Seien Sie jedoch vorsichtig, wenn Sie Endline-Leerzeichen verwenden. Wenn Sie beispielsweise ein Leerzeichen einfügen, ist line 1es in Ihrem Editor unsichtbar, aber in der Zeichenfolge vorhanden.
Ory Band
2
@ DanieleD Das ist eine leichte Folge, aber welcher Dialekt? Vermutlich hauptsächlich MySQL? stackoverflow.com/a/10574031 Beachten Sie, dass es durch Erweiterung desselben Arguments schwierig ist , Markdown- oder Shell-Skripte einzubetten (wenn Sie Backtick anstelle von verwenden $(abcd)).
Ivan Vučica
8
@KyleHeuton: Vermutlich verwendet Daniele D das Backtick-Zeichen in seinen SQL-Abfragen (wie es MySQL-Benutzer häufig tun) und findet es schmerzhaft, es als "+" "+" darstellen zu müssen und die Kopier- und Pastierbarkeit zu unterbrechen.
Ruakh
1
Der Nachteil dabei ist, dass beim Schreiben in eingerückten Code Tabulatoren in die Zeichenfolge aufgenommen werden. Wenn Sie diese entfernen, sieht Ihr Code hässlich aus. Unter solchen Umständen würde ich lieber
Lost Crotchet
111
Du kannst schreiben:
"line 1"+"line 2"+"line 3"
Das ist das gleiche wie:
"line 1line 2line3"
Im Gegensatz zur Verwendung von Back-Ticks bleiben Escape-Zeichen erhalten. Beachten Sie, dass das "+" in der 'führenden' Zeile stehen muss, dh:
Diese Lösung ist nicht analog zu Pythons mehrzeiligen Zeichenfolgen. Das Zeichenfolgenliteral wird auf mehrere Zeilen aufgeteilt, die Zeichenfolge selbst enthält jedoch nicht mehrere Zeilen.
Ben Butler-Cole
2
Da dadurch Escapezeichen erhalten bleiben, können neue Zeilen einfach hinzugefügt werden \nund es ist viel einfacher, mit dynamischen Zeichenfolgen und dergleichen zu arbeiten. Wenn ich richtig bin, ist die akzeptierte Antwort wirklich, dass statische Zeichenfolgen im Code hübsch aussehen.
RisingSun
1
Wäre das nicht auch sehr ineffizient? Die Zeichenfolge sei 3x eine 6-Zeichen-Sequenz: 6 + 2 * 6 + 3 * 6 = 36 Zeichen, die zugewiesen werden, wenn das Optimum 18 beträgt (da Zeichenfolgen unveränderlich sind, wird jedes Mal, wenn Sie zwei Zeichenfolgen hinzufügen, eine neue Zeichenfolge mit der Länge der beiden Zeichen erstellt verkettete Zeichenfolgen).
Nichts
@ N0thing: Wenn nur String-Literale vorhanden sind, gibt es keine Laufzeitunterschiede, da der Compiler optimiert. Es gibt jedoch einen kleinen Unterschied (Mikrosekunden oder sogar Nanosekunden) in der Kompilierungszeit.
Dolmen
Ich glaube, dies ist der beste Weg, um ein mehrzeiliges String-Literal mit CRLF-Zeilenenden zu erhalten
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 Zeichen außer dem hinteren Anführungszeichen erscheinen.
Ein wesentlicher Teil ist, dass rohes Literal nicht nur mehrzeilig ist und dass es nicht der einzige Zweck ist, mehrzeilig zu sein.
Der Wert eines rohen Zeichenfolgenliteral ist die Zeichenfolge, die aus den nicht interpretierten (implizit UTF-8-codierten) Zeichen zwischen den Anführungszeichen besteht. Insbesondere Backslashes haben keine besondere Bedeutung ...
Escapezeichen werden also nicht interpretiert und neue Linien zwischen Ticks sind echte neue Linien .
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 benötigen keine neuen Zeilen. In diesem Fall können Sie die Zeichenfolgenverkettung verwenden.
func main(){
multiline :="line "+"by line "+"and line "+"after line"
fmt.Print(multiline)// No new lines here}
Da "" interpretiert wird, werden String-Literal-Escapezeichen interpretiert.
func main(){
multiline :="line "+"by line \n"+"and line \n"+"after line"
fmt.Print(multiline)// New lines as interpreted \n}
Mit Back Ticks können Sie mehrzeilige Zeichenfolgen haben:
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 der einfachen Anführungszeichen (') Back-Ticks, um den Anfang und das Ende der Zeichenfolge zu definieren. Sie können es dann über Linien wickeln.
Wenn Sie die Zeichenfolge einrücken, denken Sie daran, dass der Leerraum zählt.
Bitte überprüfen Sie den Spielplatz und experimentieren Sie damit.
Sie müssen beim Formatieren und beim Zeilenabstand sehr vorsichtig sein, 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)}
Antworten:
Entsprechend der Sprachspezifikation können Sie ein Rohzeichenfolgenliteral verwenden, bei dem die Zeichenfolge durch Backticks anstelle von doppelten Anführungszeichen begrenzt wird.
quelle
line 1
es in Ihrem Editor unsichtbar, aber in der Zeichenfolge vorhanden.$(abcd)
).Du kannst schreiben:
Das ist das gleiche wie:
Im Gegensatz zur Verwendung von Back-Ticks bleiben Escape-Zeichen erhalten. Beachten Sie, dass das "+" in der 'führenden' Zeile stehen muss, dh:
erzeugt einen Fehler.
quelle
\n
und es ist viel einfacher, mit dynamischen Zeichenfolgen und dergleichen zu arbeiten. Wenn ich richtig bin, ist die akzeptierte Antwort wirklich, dass statische Zeichenfolgen im Code hübsch aussehen.Aus String-Literalen :
\n
'.Wenn Ihre mehrzeilige Zeichenfolge jedoch ein Backquote (`) enthalten muss, müssen Sie ein interpretiertes Zeichenfolgenliteral verwenden:
Sie können ein Backquote (`) nicht direkt in ein Raw-String-Literal (` `xx
\
) einfügen .Sie müssen Folgendes verwenden (wie unter " Wie füge ich ein Backquote in eine Backquote ein? " Erläutert ):
quelle
Verwenden Sie rohe String-Literale für mehrzeilige Strings:
Rohe String-Literale
Ein wesentlicher Teil ist, dass rohes Literal nicht nur mehrzeilig ist und dass es nicht der einzige Zweck ist, mehrzeilig zu sein.
Escapezeichen werden also nicht interpretiert und neue Linien zwischen Ticks sind echte neue Linien .
Verkettung
Möglicherweise haben Sie eine lange Leitung, die Sie unterbrechen möchten, und Sie benötigen keine neuen Zeilen. In diesem Fall können Sie die Zeichenfolgenverkettung verwenden.
Da "" interpretiert wird, werden String-Literal-Escapezeichen interpretiert.
quelle
Gehen Sie und mehrzeilige Zeichenfolgen
Mit Back Ticks können Sie mehrzeilige Zeichenfolgen haben:
Verwenden Sie statt der doppelten Anführungszeichen (“) oder der einfachen Anführungszeichen (') Back-Ticks, um den Anfang und das Ende der Zeichenfolge zu definieren. Sie können es dann über Linien wickeln.
Bitte überprüfen Sie den Spielplatz und experimentieren Sie damit.
quelle
Sie können Inhalte mit `` darum setzen, wie
quelle
Sie müssen beim Formatieren und beim Zeilenabstand sehr vorsichtig sein, alles zählt und hier ist ein funktionierendes Beispiel. Probieren Sie es aus: https://play.golang.org/p/c0zeXKYlmF
quelle
Sie können rohe Literale verwenden. Beispiel
quelle
Für mich ist dies das, was ich benutze, wenn das Hinzufügen
\n
kein Problem ist.Sonst können Sie die verwenden
raw string
quelle