ホームページ >バックエンド開発 >Golang >フィールドがエクスポートされていないときに、Go で HTML テンプレートの構造体フィールドにアクセスする方法は?

フィールドがエクスポートされていないときに、Go で HTML テンプレートの構造体フィールドにアクセスする方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-24 07:55:30632ブラウズ

How to Access Struct Fields in HTML Templates in Go When Fields Are Unexported?

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

問題

マップに格納されている構造体のフィールドに、 Go の html/template パッケージ。

解決策

デフォルトの Go テンプレートでは、構造体のエクスポートされていないフィールドへのアクセスが許可されません。これを有効にするには、名前の最初の文字を大文字にしてフィールドをエクスポートする必要があります。

コード例

エクスポートされたフィールドを含む構造体の定義:

<code class="go">type Task struct {
   cmd string
   args []string
   Desc string // Note the capital "D"
}</code>

エクスポートされた構造を使用してマップを初期化します:

<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>

テンプレートを解析して実行します:

<code class="go">func listHandle(w http.ResponseWriter, r *http.Request) {
    t, _ := template.ParseFiles("index.tmpl")
    t.Execute(w, taskMap)
}</code>

テンプレート ファイル:

<code class="go"><html>
{{range $key, $value := .}}
   <li>Task Name:        {{$key}}</li>
   <li>Task Value:       {{$value}}</li>
   <li>Task description: {{$value.Desc}}</li>
{{end}}
</html></code>

出力

テンプレートは、マップ内のタスク構造体のエクスポートされたフィールドにアクセスできるようになります:

<code class="html"><html>

<li>Task Name:        find</li>
<li>Task Value:       {find [/tmp/] find files in /tmp dir}</li>
<li>Task description: find files in /tmp dir</li>

<li>Task Name:        grep</li>
<li>Task Value:       {grep [foo /tmp/* -R] grep files match having foo}</li>
<li>Task description: grep files match having foo</li>

</html></code>

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

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