この記事では、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>
それでは、当面の問題を検討してみましょう。 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 $key, $value := .}} <li>Task Name: {{$key}}</li> <li>Task Value: {{$value}}</li> <li>Task description: {{$value.Desc}}</li> {{end}} </html></code>
このアプローチでは、マップのキーと値が正常に出力されます。ただし、{{$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 中国語 Web サイトの他の関連記事を参照してください。