本文解决了使用 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