首頁 >後端開發 >Golang >如何在 Go 中存取 HTML 模板中的嵌套結構欄位?

如何在 Go 中存取 HTML 模板中的嵌套結構欄位?

Linda Hamilton
Linda Hamilton原創
2024-10-24 07:46:30231瀏覽

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>

現在,讓我們來初始化映射:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn