Dieser Artikel befasst sich mit dem Problem des Abrufens von Strukturfeldern aus Kartenelementen in HTML-Vorlagen mithilfe von html/ Vorlagenpaket in Go.
Betrachten Sie die folgende Aufgabenstruktur:
type Task struct {
Cmd string
Args []string
Desc string
}
Außerdem wird eine Map mit Task-Strukturen als Werten und Strings als Schlüssel initialisiert:
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",
},
}
Lassen Sie uns nun das vorliegende Problem untersuchen. Zum Parsen einer HTML-Seite wird eine Vorlage verwendet:
func listHandle(w http.ResponseWriter, r *http.Request){
t, _ := template.ParseFiles("index.tmpl")
t.Execute(w, taskMap)
}
Der folgende Codeausschnitt stellt die index.tmpl-Vorlage dar:
{{range $key, $value := .}}
Task Name: {{$key}}
Task Value: {{$value}}
Task description: {{$value.Desc}}
{{end}}
Dieser Ansatz gibt die Schlüssel und Werte der Karte erfolgreich aus, aber Versuche, auf die Aufgabenfelder innerhalb der Vorlage zuzugreifen, beispielsweise mit {{$value.Desc}}, führen zu Fehlern.
Die Lösung besteht darin, die Felder, auf die Sie zugreifen möchten, innerhalb der Vorlagen zu exportieren. Dies kann durch die Großschreibung des ersten Buchstabens der Feldnamen erreicht werden:
type Task struct {
Cmd string
Args []string
Desc string
}
Folglich müssen auch Verweise auf Feldnamen innerhalb der Vorlage großgeschrieben werden:
{{range $key, $value := .}}
Task Name: {{$key}}
Task Value: {{$value}}
Task description: {{$value.Desc}}
{{end}}
Indem Sie diese Schritte befolgen, können Sie das Desc-Feld jeder Aufgabe in der Vorlage erfolgreich abrufen und anzeigen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3