Go でマップを使用するときに HTML テンプレートの構造体フィールドにアクセスするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-24 07:43:29
オリジナル
538 人が閲覧しました

How to Access Struct Fields in HTML Templates when Using Maps in Go?

Go の html/template を使用した HTML テンプレートの構造体フィールドへのアクセス

Go の html/template パッケージでは、保存されている構造体のフィールドにアクセスするときに問題が発生する可能性がありますマップ内の値として。この記事では、この問題の解決策を提供し、テンプレート内の構造体の個々のフィールドを取得して表示できるようにします。

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/template を使用して taskMap データを使用して 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 $k, $v := .}}
   <li>Task Name: {{$k}}</li>
   <li>Task Value: {{$v}}</li>
   <li>Task Description: {{$v.Desc}}</li>
{{end}}
</html></code>
ログイン後にコピー

マップから $k 変数と $v 変数へのアクセスは期待どおりに機能しますが、{{$v.Desc}} を使用した Desc フィールドへのアクセスは失敗します。 。これを解決するには、テンプレート内でアクセスしたいフィールドがエクスポートされていることを確認する必要があります。 Go では、フィールドが大文字で始まる場合にエクスポートされます。

解決策:

タスク構造体を変更して Desc フィールドをエクスポートします:

<code class="go">type Task struct {
   Cmd string
   Args []string
   Desc string
}</code>
ログイン後にコピー
ログイン後にコピー

マップを更新しますエクスポートされた Desc フィールドを使用して:

<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>
ログイン後にコピー
ログイン後にコピー

テンプレートで、エクスポートされた Desc フィールドを参照するように構文を更新します:

<code class="html">{{range $k, $v := .}}
   <li>Task Name: {{$k}}</li>
   <li>Task Value: {{$v}}</li>
   <li>Task Description: {{$v.Desc}}</li>
{{end}}</code>
ログイン後にコピー

次の手順に従うことで、 HTML テンプレート内の構造体フィールドを使用すると、Go マップに保存されているデータを簡単に表示して利用できるようになります。

以上がGo でマップを使用するときに HTML テンプレートの構造体フィールドにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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