为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 的 html/template 中获取地图元素的结构字段?

如何在 Go 的 html/template 中获取地图元素的结构字段?

Go
慕运维8079593 2021-09-10 21:04:12
我有一个结构Task:type Task struct {   cmd string   args []string   desc string}我初始化了一个映射,它将上述Task结构作为值和 astring作为键(任务名称)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。func listHandle(w http.ResponseWriter, r *http.Request){    t, _ := template.ParseFiles("index.tmpl")    t.Execute(w, taskMap)}这是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}}它的领域时,它就行不通了。在这种情况下,我怎样才能得到desc每个task?
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

注意:您可以在Go Playground 中尝试/检查您的工作修改后的代码。


如果您希望template包能够访问这些字段,则必须导出这些字段。您可以通过以大写字母开头来导出字段:


type Task struct {

   cmd string

   args []string

   Desc string

}

请注意,我只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>


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信