Lorsqu’on travaille avec le paquet text/template de Go, le formatage de structures de données imbriquées entraîne souvent l’apparition de lignes vides indésirables. Comme les templates Go conservent tous les espaces blancs — y compris les sauts de ligne utilisés pour formater le code du template lui-même — les boucles standards produisent une sortie surchargée.
Voici comment résoudre le problème des espaces blancs à l’aide des marqueurs de rognage (trim markers) des templates Go.
Imaginons que nous voulions formater cette structure de données imbriquée :
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"},
},
}
Une façon naturelle d’écrire le template consiste à utiliser des blocs {{ range }} standards :
{{ range $name, $map := . }}
{{ $name }}:
{{ range $name, $values := $map }}
{{ $name }}:
{{ range $value := $values }}
{{ $value }}
{{ end }}
{{ end }}
{{ end }}
Étant donné que chaque saut de ligne et chaque espace d’indentation du template est affiché exactement tel qu’il est écrit, la sortie est jonchée d’espaces vides :
1:
1.1:
1.1.1
1.1.2
1.1.3
2:
...
-)
🔗Vous pouvez demander au moteur de templates de Go de consommer les espaces blancs adjacents en ajoutant un signe moins (-) à l’intérieur des balises d’action :
{{- ... }} supprime tous les espaces blancs précédents (espaces, tabulations et sauts de ligne) jusqu’au caractère non blanc précédent.{{ ... -}} supprime tous les espaces blancs suivants jusqu’au prochain caractère non blanc.Pour corriger notre boucle imbriquée, nous plaçons stratégiquement le marqueur - afin d’absorber les sauts de ligne de formatage du template sans supprimer l’indentation souhaitée :
{{- range $name, $map := . -}}
{{ $name }}:
{{- range $name, $values := $map }}
{{ $name }}:
{{- range $value := $values }}
{{ $value }}
{{- end }}
{{- end }}
{{ end -}}
En supprimant les sauts de ligne qui suivent immédiatement les déclarations range et les blocs end, nous obtenons une sortie propre et compacte :
1:
1.1:
1.1.1
1.1.2
1.1.3
2:
2.1:
2.1.1
2.1.2
2.1.3
Vous pouvez copier et exécuter ce code pour tester directement ce comportement.
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("'''")
}
Obtenez l'édition hors ligne de Le Mode de Vie de Kaue—un guide pratique pour optimiser 🍏 Santé, 💰 Richesse, ❤️ Amour et 🧘 Sens.
Recevez une notification lorsque je publie de nouveaux essais, résumés de livres et guides pratiques pour bien vivre. Sans spam—désabonnez-vous à tout moment.
Vous avez une question, une perspective ou une suggestion ? Partagez vos réflexions ci-dessous. Les commentaires fonctionnent avec GitHub Discussions (sans publicité et sans spam)—cliquez sur Se connecter avec GitHub ci-dessous pour commenter ou réagir (créer un compte GitHub gratuit prend moins d'une minute).
Mis à jour le 11 oct. 2026.
AVERTISSEMENT : Le contenu de ce site est fourni à titre purement informatif et éducatif et ne constitue pas un avis médical, psychologique, financier, d'investissement, fiscal ou juridique. Les idées, la sélection et les opinions présentées ici n'engagent que moi et ne représentent pas celles de mon employeur. Les résumés de livres, de conférences et d'articles sont des commentaires éducatifs indépendants et restent la propriété intellectuelle de leurs auteurs respectifs. Des outils d'IA peuvent être utilisés pour aider à l'édition, à la mise en forme et à la synthèse ; bien que tous les efforts soient déployés pour garantir l'exactitude, des erreurs peuvent survenir. CONFIDENTIALITÉ : Ce site utilise des services tiers pour l'abonnement facultatif à la newsletter (follow.it), les commentaires (giscus / GitHub Discussions) et les médias intégrés (YouTube), qui peuvent traiter les adresses IP et les cookies des visiteurs conformément à leurs politiques de confidentialité respectives.