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