在Go 的html/template 套件中,存取儲存的結構體欄位時可能會遇到挑戰作為地圖中的值。本文提供了此問題的解決方案,使您能夠檢索並顯示模板中結構體的各個欄位。
考慮以下範例,其中我們定義了一個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/template 使用taskMap 資料來解析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 $k, $v := .}} <li>Task Name: {{$k}}</li> <li>Task Value: {{$v}}</li> <li>Task Description: {{$v.Desc}}</li> {{end}} </html></code>
雖然從映射中存取$k 和$v 變數按預期工作,但使用{{$v.Desc}} 存取Desc 欄位失敗。為了解決這個問題,我們需要確保在匯出範本中要存取的欄位。在 Go 中,欄位以大寫字母開頭時會被匯出。
修改Task 結構體以匯出Desc 欄位:
<code class="go">type Task struct { Cmd string Args []string Desc string }</code>
更新映射使用匯出的Desc 欄位:
<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>
更新映射使用匯出的Desc 欄位:
<code class="html">{{range $k, $v := .}} <li>Task Name: {{$k}}</li> <li>Task Value: {{$v}}</li> <li>Task Description: {{$v.Desc}}</li> {{end}}</code>
以上是在 Go 中使用 Map 時如何存取 HTML 範本中的結構體欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!