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

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

DDD
DDDオリジナル
2024-11-09 01:00:02779ブラウズ

How to Access Non-Struct Fields in Go Templates Within Range Loops?

範囲ループ内の Go テンプレートの非構造体フィールドへのアクセス

{{ を使用して Go テンプレート内の構造体のスライスを反復処理する場合range}} ループを使用している場合、構造体の直接の一部ではないフィールドにアクセスしようとすると、エラーが発生する可能性があります。たとえば、次の例を考えてみましょう:

type User struct {
    Username string
    Password []byte
    Email string
    ...
}

renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{
  "lang":  chi.URLParam(r, "lang"),
  "users": users})

HTML テンプレート内で、{{ .lang }} フィールドにアクセスしようとすると、次のエラーが発生する可能性があります:

`got template: can't evaluate field X in type Y (X not part of Y but stuck in a {{range}} loop)`

このエラーは、{{ .lang }} フィールドが User 構造体の一部ではないために発生します。この問題を解決するには、 {{ に割り当てられたデータを参照する $ 変数を利用できます。

{{ range .users }}
  <form action="/{{ $.lang }}/users" method="POST">
    <input type="text" name="Username" value="{{ .Username }}">
    <input type="text" name="Email" value="{{ .Email }}">
  </form>
{{ end }}

Go テンプレートのドキュメントによると、{{range}} ループの実行が開始されると、$ 変数が自動的にデータに設定されます。テンプレートに渡される引数。この場合、データ引数は lang キーを含むマップです。したがって、$ を使用してループ内の lang 値にアクセスできます。

ネストされたループ内の複数の非構造体フィールドにアクセスする必要がある場合は、with ステートメントまたは変数代入ステートメントを利用して {{ を割り当てることもできます。 。 }} を別の変数に変換します。

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

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