ホームページ  >  記事  >  バックエンド開発  >  Go で HTML テンプレートのネストされた構造体フィールドにアクセスするにはどうすればよいですか?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-24 07:46:30144ブラウズ

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

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

この記事では、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。