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