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

Linda Hamilton
リリース: 2024-10-24 07:46:30
オリジナル
143 人が閲覧しました

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

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!