首页  >  文章  >  后端开发  >  如何在 Go 中访问 HTML 模板中的嵌套结构字段?

如何在 Go 中访问 HTML 模板中的嵌套结构字段?

Linda Hamilton
Linda Hamilton原创
2024-10-24 07:46:30144浏览

How to Access Nested Struct Fields in HTML Templates in Go?

如何在 Go 中访问 HTML 模板中地图元素的结构字段

本文解决了使用 html/ 从 HTML 模板中的地图元素检索结构字段的问题Go 中的模板包。

考虑以下 Task 结构:

<code class="go">type Task struct {
   Cmd string
   Args []string
   Desc string
}</code>

此外,使用 Task 结构作为值和字符串作为键来初始化映射:

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

现在,让我们来研究一下当前的问题。模板用于解析 HTML 页面:

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

以下代码片段表示 index.tmpl 模板:

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

此方法成功输出地图的键和值,但尝试访问模板中的任务字段(例如使用 {{$value.Desc}})会导致错误。

解决方案在于导出您希望在模板中访问的字段。这可以通过将字段名称的首字母大写来实现:

<code class="go">type Task struct {
   Cmd string
   Args []string
   Desc string
}</code>

因此,模板中对字段名称的引用也必须大写:

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

按照以下步骤操作,您可以成功检索并显示模板中每个任务的 Desc 字段。

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

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