本文解決了使用html/ 從HTML 模板中的映射元素檢索結構字段的問題Go 中的模板包。
考慮以下 Task 結構體:
type Task struct {
Cmd string
Args []string
Desc string
}
此外,映射是用 Task 結構體作為值、字串作為鍵來初始化的:
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",
},
}
現在,讓我們檢查一下當前的問題。範本用於解析 HTML 頁面:
func listHandle(w http.ResponseWriter, r *http.Request){
t, _ := template.ParseFiles("index.tmpl")
t.Execute(w, taskMap)
}
以下程式碼片段代表index.tmpl範本:
{{range $key, $value := .}}
Task Name: {{$key}}
Task Value: {{$value}}
Task description: {{$value.Desc}}
{{end}}
此方法成功輸出地圖的鍵和值,但嘗試存取模板內的任務欄位(例如使用 {{$value.Desc}})會導致錯誤。
解決方案在於匯出您希望在範本中存取的欄位。這可以透過將欄位名稱的第一個字母大寫來實現:
type Task struct {
Cmd string
Args []string
Desc string
}
因此,範本中對欄位名稱的引用也必須大寫:
{{range $key, $value := .}}
Task Name: {{$key}}
Task Value: {{$value}}
Task description: {{$value.Desc}}
{{end}}
依照下列步驟,您可以成功擷取並顯示範本中每個任務的 Desc 欄位。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3