本文解决了使用 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中文网其他相关文章!