Quando si lavora con il pacchetto text/template di Go, la formattazione di strutture dati annidate produce spesso righe vuote indesiderate. Poiché i template Go preservano tutti gli spazi bianchi — inclusi i caratteri di ritorno a capo utilizzati per formattare il codice stesso del template — i cicli standard generano un output pieno di righe superflue.
Ecco come risolvere il problema degli spazi bianchi utilizzando i marcatori di taglio (trim markers) dei template Go.
Supponiamo di voler formattare questa struttura dati annidata:
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"},
},
}
Un modo naturale per scrivere il template consiste nell’usare i blocchi standard {{ range }}:
{{ range $name, $map := . }}
{{ $name }}:
{{ range $name, $values := $map }}
{{ $name }}:
{{ range $value := $values }}
{{ $value }}
{{ end }}
{{ end }}
{{ end }}
Poiché ogni ritorno a capo e spazio di indentazione nel template viene stampato esattamente come è scritto, l’output risulta disseminato di righe vuote:
1:
1.1:
1.1.1
1.1.2
1.1.3
2:
...
-)
🔗Puoi istruire il motore di template di Go affinché consumi gli spazi bianchi adiacenti aggiungendo un segno meno (-) all’interno dei tag di azione:
{{- ... }} rimuove tutti gli spazi bianchi precedenti (spazi, tabulazioni e ritorni a capo) fino al carattere non vuoto precedente.{{ ... -}} rimuove tutti gli spazi bianchi successivi fino al carattere non vuoto successivo.Per correggere il nostro ciclo annidato, posizioniamo strategicamente il marcatore - in modo da eliminare i ritorni a capo di formattazione del template senza rimuovere l’indentazione desiderata:
{{- range $name, $map := . -}}
{{ $name }}:
{{- range $name, $values := $map }}
{{ $name }}:
{{- range $value := $values }}
{{ $value }}
{{- end }}
{{- end }}
{{ end -}}
Rimuovendo i ritorni a capo immediatamente successivi alle dichiarazioni range e ai blocchi end, otteniamo un output pulito e compatto:
1:
1.1:
1.1.1
1.1.2
1.1.3
2:
2.1:
2.1.1
2.1.2
2.1.3
Puoi copiare ed eseguire questo codice per testare direttamente il comportamento.
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("'''")
}
Scarica l'edizione offline di Lo Stile di Vita di Kaue—una guida pratica per ottimizzare 🍏 Salute, 💰 Ricchezza, ❤️ Amore e 🧘 Significato.
Ricevi una notifica quando pubblico nuovi saggi, riassunti di libri e guide pratiche per vivere bene. Niente spam—annulla l'iscrizione in qualsiasi momento.
Hai una domanda, una prospettiva o un suggerimento? Condividi i tuoi pensieri qui sotto. I commenti utilizzano GitHub Discussions (senza pubblicità e senza spam)—clicca su Accedi con GitHub qui sotto per commentare o reagire (creare un account GitHub gratuito richiede meno di un minuto).
Aggiornato il 11 ott 2026.
AVVERTENZA LEGALE: Il contenuto di questo sito ha scopo esclusivamente informativo ed educativo e non costituisce consulenza medica, psicologica, finanziaria, di investimento, fiscale o legale. Le idee, la selezione e le opinioni qui presentate sono esclusivamente mie e non rappresentano quelle del mio datore di lavoro. I riassunti di libri, conferenze e articoli sono commenti educativi indipendenti e rimangono proprietà intellettuale dei rispettivi autori. Strumenti di IA possono essere utilizzati per assistere nella revisione, formattazione e sintesi; sebbene venga compiuto ogni sforzo per garantire l'accuratezza, possono verificarsi errori. PRIVACY: Questo sito utilizza servizi di terze parti per l'iscrizione facoltativa alla newsletter (follow.it), i commenti (giscus / GitHub Discussions) e i contenuti multimediali incorporati (YouTube), che possono trattare gli indirizzi IP e i cookie dei visitatori in conformità con le rispettive informative sulla privacy.