Wenn man mit dem Paket text/template in Go arbeitet, führt das Formatieren verschachtelter Datenstrukturen oft zu unerwünschten Leerzeilen. Da Go-Templates sämtliche Leerzeichen (Whitespace) beibehalten – einschließlich der Zeilenumbrüche, die zur Formatierung des Template-Codes selbst dienen –, erzeugen herkömmliche Schleifen schnell eine aufgeblähte Ausgabe.
Hier erfahren Sie, wie Sie das Whitespace-Problem mithilfe der Trim-Marker von Go-Templates lösen.
Nehmen wir an, wir möchten folgende verschachtelte Datenstruktur formatieren:
var data = map[string]map[string][]string{
"1": {
"1.1": {"1.1.1", "1.1.2", "1.1.3"},
},
"2": {
"2.1": {"2.1.1", "2.1.2", "2.1.3"},
},
}
Ein naheliegender Weg, das Template zu schreiben, ist die Verwendung gewöhnlicher {{ range }}-Blöcke:
{{ range $name, $map := . }}
{{ $name }}:
{{ range $name, $values := $map }}
{{ $name }}:
{{ range $value := $values }}
{{ $value }}
{{ end }}
{{ end }}
{{ end }}
Da jeder Zeilenumbruch und jedes Einrückungsleerzeichen im Template exakt so ausgegeben wird, wie es dort steht, ist die Ausgabe voller Leerzeilen:
1:
1.1:
1.1.1
1.1.2
1.1.3
2:
...
-)
🔗Sie können die Go-Template-Engine anweisen, angrenzende Leerzeichen und Zeilenumbrüche zu entfernen, indem Sie innerhalb der Aktions-Tags ein Minuszeichen (-) hinzufügen:
{{- ... }} entfernt sämtlichen vorangestellten Whitespace (Leerzeichen, Tabulatoren und Zeilenumbrüche) bis zum vorherigen Nicht-Whitespace-Zeichen.{{ ... -}} entfernt sämtlichen nachfolgenden Whitespace bis zum nächsten Nicht-Whitespace-Zeichen.Um unsere verschachtelte Schleife zu korrigieren, platzieren wir den Marker - gezielt so, dass er die Formatierungs-Zeilenumbrüche des Templates verschluckt, ohne unsere gewünschte Einrückung zu löschen:
{{- range $name, $map := . -}}
{{ $name }}:
{{- range $name, $values := $map }}
{{ $name }}:
{{- range $value := $values }}
{{ $value }}
{{- end }}
{{- end }}
{{ end -}}
Indem wir die Zeilenumbrüche direkt nach den range-Deklarationen und vor den end-Blöcken entfernen, erhalten wir eine saubere, kompakte Ausgabe:
1:
1.1:
1.1.1
1.1.2
1.1.3
2:
2.1:
2.1.1
2.1.2
2.1.3
Sie können diesen Code kopieren und direkt ausführen, um das Verhalten selbst zu testen.
package main
import (
"fmt"
"os"
"text/template"
)
var data = map[string]map[string][]string{
"1": {
"1.1": {"1.1.1", "1.1.2", "1.1.3"},
},
"2": {
"2.1": {"2.1.1", "2.1.2", "2.1.3"},
},
}
func main() {
const tpl = `
{{- range $name, $map := . -}}
{{ $name }}:
{{- range $name, $values := $map }}
{{ $name }}:
{{- range $value := $values }}
{{ $value }}
{{- end }}
{{- end }}
{{ end -}}
`
fmt.Println("Output:")
fmt.Println("'''")
t := template.Must(template.New("nested").Parse(tpl))
t.Execute(os.Stdout, data)
fmt.Println("'''")
}
Lade die kuratierte Offline-Ausgabe von Kaues Lebensweise herunter – ein praktischer Leitfaden zur Optimierung von 🍏 Gesundheit, 💰 Wohlstand, ❤️ Liebe und 🧘 Sinn.
Erhalte eine Benachrichtigung, wenn ich neue Essays, Buchzusammenfassungen und praktische Leitfäden für ein gutes Leben veröffentliche. Kein Spam – jederzeit abbestellbar.
Hast du eine Frage, eine Perspektive oder einen Vorschlag? Teile deine Gedanken unten mit. Die Kommentare werden über GitHub Discussions bereitgestellt (werbefrei und spamfrei) – klicke unten auf Mit GitHub anmelden, um zu kommentieren oder zu reagieren (ein kostenloses GitHub-Konto ist in weniger als einer Minute erstellt).
Aktualisiert am 11.10.2026.
HAFTUNGSAUSSCHLUSS: Die Inhalte auf dieser Website dienen ausschließlich Informations- und Bildungszwecken und stellen keine medizinische, psychologische, finanzielle, steuerliche oder rechtliche Beratung sowie keine Anlageberatung dar. Die hier präsentierten Ideen, Zusammenstellungen und Meinungen sind meine eigenen und spiegeln nicht die meines Arbeitgebers wider. Zusammenfassungen von Büchern, Vorträgen und Artikeln sind unabhängige Bildungskommentare und bleiben geistiges Eigentum der jeweiligen Autoren. KI-Tools können zur Unterstützung bei der Bearbeitung, Formatierung und Synthese eingesetzt werden; obwohl größte Sorgfalt auf Richtigkeit gelegt wird, können Fehler auftreten. DATENSCHUTZ: Diese Website nutzt Dienste von Drittanbietern für optionale Newsletter-Abonnements (follow.it), Kommentare (giscus / GitHub Discussions) und eingebettete Medien (YouTube), die IP-Adressen und Cookies der Besucher gemäß ihren jeweiligen Datenschutzrichtlinien verarbeiten können.