首页 >后端开发 >Golang >当字段未导出时,如何在 Go 中访问 HTML 模板中的结构体字段?

当字段未导出时,如何在 Go 中访问 HTML 模板中的结构体字段?

Susan Sarandon
Susan Sarandon原创
2024-10-24 07:55:30635浏览

How to Access Struct Fields in HTML Templates in Go When Fields Are Unexported?

如何在 Go 中访问 HTML 模板中的结构体字段

问题

您想要使用以下方式访问存储在映射中的结构体字段Go 中的 html/template 包。

解决方案

默认的 Go 模板不允许访问结构体的未导出字段。要启用此功能,您需要通过大写字段名称的第一个字母来导出字段。

代码示例

使用导出字段定义结构:

<code class="go">type Task struct {
   cmd string
   args []string
   Desc string // Note the capital "D"
}</code>

使用导出的结构初始化映射:

<code class="go">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",
    },
}</code>

解析并执行模板:

<code class="go">func listHandle(w http.ResponseWriter, r *http.Request) {
    t, _ := template.ParseFiles("index.tmpl")
    t.Execute(w, taskMap)
}</code>

模板文件:

<code class="go"><html>
{{range $key, $value := .}}
   <li>Task Name:        {{$key}}</li>
   <li>Task Value:       {{$value}}</li>
   <li>Task description: {{$value.Desc}}</li>
{{end}}
</html></code>

输出

模板现在可以访问映射中任务结构的导出字段:

<code class="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></code>

以上是当字段未导出时,如何在 Go 中访问 HTML 模板中的结构体字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn