Mehrzeilige Strings in Go: 5 fatale Fehler und wie man sie vermeidet

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Mehrzeilige Strings in Go: Fallstricke, die selbst erfahrene Entwickler erwischen



Stellen Sie sich vor: Sie schreiben in Go eine SQL-Abfrage, eine JSON-Vorlage oder einfach eine lange Nachricht für das Log. Sie drücken intuitiv die Eingabetaste, um die Zeile umzubrechen, und … der Compiler gibt einen Fehler aus. Kommt Ihnen bekannt vor? Die Frage "How do you write multiline strings in Go?" auf Stack Overflow hat tausende Aufrufe nicht ohne Grund. Es ist eines dieser kleinen Details, das selbst diejenigen verwirren kann, die die Syntax der Sprache bereits beherrschen.



In diesem Artikel analysieren wir die Top-5 fatalen Fehler bei der Arbeit mit mehrzeiligen Strings in Go und zeigen, wie man sie vermeidet. Sie erfahren, wie sich interpretierte und rohe Literale unterscheiden, warum ein überflüssiges Leerzeichen Ihren Tag ruinieren kann und wie Sie Code richtig formatieren. Los geht's!



Fehler Nr. 1: Verwendung von doppelten Anführungszeichen für mehrzeiligen Text



Der häufigste Anfängerfehler ist der Versuch, einen mehrzeiligen String innerhalb von doppelten Anführungszeichen (") zu schreiben. In Go erzeugen doppelte Anführungszeichen ein interpretiertes String-Literal. Das bedeutet, dass das Zeichen für einen Zeilenumbruch darin verboten ist.



// Dieser Code wird NICHT kompiliertpackage main

import "fmt"

func main() { // Fehler: unexpected newline in string literal message := "Hallo, Welt!" fmt.Println(message)}


Der Go-Compiler ist streng: Er sieht ein nicht geschlossenes Anführungszeichen und ein Zeilenumbruchzeichen, was zu einem Syntaxfehler führt. Merken Sie sich: Doppelte Anführungszeichen sind nur für einzeilige Strings.



Fehler Nr. 2: Ignorieren von rohen String-Literalen (raw string literals)



Die Lösung für das Problem der Mehrzeiligkeit sind rohe String-Literale. Sie werden mit Backticks (`) erstellt. Darin werden alle Zeichen wörtlich interpretiert, einschließlich Zeilenumbrüche, Tabulatoren und sogar des umgekehrten Schrägstrichs.



// Der richtige Weg: Backticks verwendenpackage main

import "fmt"

func main() { message := `Hallo,Welt!` fmt.Println(message)}// Ausgabe:// Hallo,// Welt!


Dies ist die ideale Lösung für SQL-Abfragen, JSON, HTML-Vorlagen und jeden anderen Text, bei dem die Struktur wichtig ist. Hier lauert jedoch der nächste Fehler.



Fehler Nr. 3: Überflüssige Leerzeichen und Einrückungen innerhalb von rohen Strings



Wenn Sie Code schreiben, formatieren Sie ihn zur Lesbarkeit mit Einrückungen. Wenn Sie jedoch einen mehrzeiligen String direkt in den Funktionskörper mit Einrückungen einfügen, werden diese Einrückungen Teil des Strings.



// Beispiel mit "überflüssigen" Leerzeichenpackage main

import "fmt"

func main() { query := ` SELECT id, name FROM users WHERE active = true ` fmt.Println(query)}// Ausgabe (beachten Sie die führenden Leerzeichen)://// SELECT id, name// FROM users// WHERE active = true//


Die erste Zeile der Ausgabe ist leer (weil ein Zeilenumbruch nach dem öffnenden Backtick folgt), und jede folgende Zeile beginnt mit 8 Leerzeichen. Dies kann die Logik zerstören, wenn der String beispielsweise in os.Exec oder beim Vergleich verwendet wird.



Wie vermeidet man das? Es gibt zwei Wege. Der erste ist, den String ohne Einrückungen, bündig am Rand zu schreiben:



query := `SELECT id, nameFROM usersWHERE active = true`


Der zweite ist die Verwendung von Verkettung oder strings.TrimSpace. Am einfachsten ist es jedoch, sich anzugewöhnen, innerhalb von rohen Strings keine Einrückungen zu machen, wenn diese kritisch sind. Für SQL-Abfragen ist das oft kein Problem, aber für Logs oder Benutzernachrichten kann es fatal sein.



Fehler Nr. 4: Escape-Sequenzen in rohen Strings vergessen



Rohe Strings unterstützen keine Escape-Sequenzen. Das bedeutet, dass innerhalb von Backticks einfach zwei Zeichen sind: ein umgekehrter Schrägstrich und der Buchstabe 'n', und kein Zeilenumbruch.



package main

import "fmt"

Blogs

Buchempfehlungen