登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-05-01 10:14:23 385浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《如何在 Go 的 html/模板中获取地图元素的结构字段?》就很适合你!本篇内容主要包括如何在 Go 的 html/模板中获取地图元素的结构字段?,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我有一个结构Task

type Task struct {
   cmd string
   args []string
   desc string
}

我初始化了一个地图,它把上面的Task结构作为一个值,一个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

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}}

    我可以成功地得到$keyvalue打印,但是当涉及到Task使用它的领域时,{{$value.desc}}它就行不通了。

    在这种情况下,我怎样才能得到desc每个task

    正确答案

    注意:您可以在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",
        },
    }
    

    而且在模板中:

    {{range $key, $value := .}}
       
  • Task Name: {{$key}}
  • Task Value: {{$value}}
  • Task description: {{$value.Desc}}
  • {{end}}

    输出:

    
    
  • Task Name: find
  • Task Value: {find [/tmp/] find files in /tmp dir}
  • Task description: find files in /tmp dir
  • Task Name: grep
  • Task Value: {grep [foo /tmp/* -R] grep files match having foo}
  • Task description: grep files match having foo
  • 今天关于《如何在 Go 的 html/模板中获取地图元素的结构字段?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

    声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
    相关阅读
    更多>
    最新阅读
    更多>
    课程推荐
    更多>