Cet article aborde le problème de la récupération des champs de structure à partir d'éléments de carte dans des modèles HTML à l'aide de l'outil html/ package de modèles dans Go.
Considérez la structure de tâche suivante :
type Task struct {
Cmd string
Args []string
Desc string
}
De plus, une carte est initialisée avec des structures de tâches comme valeurs et des chaînes comme clés :
var taskMap = map[string]Task{
"find": Task{
Cmd: "find",
Args: []string{"/tmp/"},
Desc: "find files in /tmp dir",
},
"grep": Task{
Cmd: "grep",
Args:[]string{"foo","/tmp/*", "-R"},
Desc: "grep files match having foo",
},
}
Maintenant, examinons le problème en question. Un modèle est utilisé pour analyser une page HTML :
func listHandle(w http.ResponseWriter, r *http.Request){
t, _ := template.ParseFiles("index.tmpl")
t.Execute(w, taskMap)
}
L'extrait de code suivant représente le modèle index.tmpl :
{{range $key, $value := .}}
Task Name: {{$key}}
Task Value: {{$value}}
Task description: {{$value.Desc}}
{{end}}
Cette approche génère avec succès les clés et les valeurs de la carte, mais les tentatives d'accès aux champs de tâches dans le modèle, par exemple en utilisant {{$value.Desc}}, entraînent des erreurs.
La solution réside dans l'export des champs auxquels vous souhaitez accéder au sein des modèles. Ceci peut être réalisé en mettant en majuscule la première lettre des noms de champs :
type Task struct {
Cmd string
Args []string
Desc string
}
Par conséquent, les références aux noms de champs dans le modèle doivent également être en majuscules :
{{range $key, $value := .}}
Task Name: {{$key}}
Task Value: {{$value}}
Task description: {{$value.Desc}}
{{end}}
En suivant ces étapes, vous pouvez récupérer et afficher avec succès le champ Desc de chaque tâche dans le modèle.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3