この記事では、html/ を使用して HTML テンプレート内のマップ要素から構造体フィールドを取得する問題について説明します。 Go のテンプレート パッケージ。
次のタスク構造体を考えてみましょう:
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 フィールドを正常に取得して表示できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3