本文解決了使用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>
現在,讓我們來初始化映射:
<code class="go">func listHandle(w http.ResponseWriter, r *http.Request){ t, _ := template.ParseFiles("index.tmpl") t.Execute(w, taskMap) }</code>
現在,讓我們來研究一下當前的問題。範本用於解析HTML 頁面:
<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>
以下程式碼片段表示index.tmpl 範本:
此方法成功輸出地圖的鍵和值,但嘗試存取範本中的任務欄位(例如使用{{$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中文網其他相關文章!