我有一个Struct Task:
Task
type Task struct { cmd string args []string desc string }
然后我初始化一个以上述Task结构作为值和string键作为键(任务名称)的映射
string
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/template只使用上述解析html页面taskMap。
html/template
taskMap
func listHandle(w http.ResponseWriter, r *http.Request){ t, _ := template.ParseFiles("index.tmpl") t.Execute(w, taskMap) }
这是index.tmpl:
index.tmpl
<html> {{range $key, $value := .}} <li>Task Name: {{$key}}</li> <li>Task Value: {{$value}}</li> <li>Task description: {{$value.desc}}</li> {{end}} </html>
我可以成功获取$key并value打印,但是在Task使用领域,{{$value.desc}}它是行不通的。
$key
value
{{$value.desc}}
在这种情况下,如何获得desc每个的task?
desc
task
注意:您可以在 Go Playground中 尝试/签出您工作的修改后的代码。
如果希望template软件包能够访问字段,则必须导出字段。您可以通过以大写字母开头的字段来导出该字段:
template
type Task struct { cmd string args []string Desc string }
请注意,我仅Desc在此处进行了更改,您必须将要在模板中引用的所有其他字段都大写。
Desc
导出之后Desc,请当然将所有引用更改为大写:
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> {{range $key, $value := .}} <li>Task Name: {{$key}}</li> <li>Task Value: {{$value}}</li> <li>Task description: {{$value.Desc}}</li> {{end}} </html>
输出:
<html> <li>Task Name: find</li> <li>Task Value: {find [/tmp/] find files in /tmp dir}</li> <li>Task description: find files in /tmp dir</li> <li>Task Name: grep</li> <li>Task Value: {grep [foo /tmp/* -R] grep files match having foo}</li> <li>Task description: grep files match having foo</li> </html>