」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Go 中存取 HTML 模板中的嵌套結構欄位?

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

發佈於2024-11-17
瀏覽:373

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

如何在Go 中存取HTML 模板中的映射元素的結構字段

本文解決了使用html/ 從HTML 模板中的映射元素檢索結構字段的問題Go 中的模板包。

考慮以下 Task 結構體:

type Task struct {
   Cmd string
   Args []string
   Desc string
}

此外,映射是用 Task 結構體作為值、字串作為鍵來初始化的:

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",
    },
}

現在,讓我們檢查一下當前的問題。範本用於解析 HTML 頁面:

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

以下程式碼片段代表index.tmpl範本:


{{range $key, $value := .}}
   
  • Task Name: {{$key}}
  • Task Value: {{$value}}
  • Task description: {{$value.Desc}}
  • {{end}}

    此方法成功輸出地圖的鍵和值,但嘗試存取模板內的任務欄位(例如使用 {{$value.Desc}})會導致錯誤。

    解決方案在於匯出您希望在範本中存取的欄位。這可以透過將欄位名稱的第一個字母大寫來實現:

    type Task struct {
       Cmd string
       Args []string
       Desc string
    }

    因此,範本中對欄位名稱的引用也必須大寫:

    
    {{range $key, $value := .}}
       
  • Task Name: {{$key}}
  • Task Value: {{$value}}
  • Task description: {{$value.Desc}}
  • {{end}}

    依照下列步驟,您可以成功擷取並顯示範本中每個任務的 Desc 欄位。

    版本聲明 本文轉載於:1729726421如有侵犯,請洽[email protected]刪除
    最新教學 更多>

    免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

    Copyright© 2022 湘ICP备2022001581号-3