「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go で HTML テンプレートのネストされた構造体フィールドにアクセスするにはどうすればよいですか?

Go で HTML テンプレートのネストされた構造体フィールドにアクセスするにはどうすればよいですか?

2024 年 11 月 17 日に公開
ブラウズ:510

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

Go で HTML テンプレートのマップ要素の構造体フィールドにアクセスする方法

この記事では、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 フィールドを正常に取得して表示できます。

    リリースステートメント この記事は次の場所に転載されています: 1729726421 侵害がある場合は、[email protected] に連絡して削除してください。
    最新のチュートリアル もっと>

    免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

    Copyright© 2022 湘ICP备2022001581号-3