エラー: 入れ子になった範囲を持つ Go テンプレートの「タイプ Y のフィールド X を評価できません」
エラー「評価できません」タイプ Y のフィールド X (X は Y の一部ではありませんが、{{range}} ループでスタックしています)」は、一部ではないフィールドにアクセスしようとすると発生しますGo テンプレートで反復処理される構造体の。これは、ネストされた範囲があり、外側の範囲で定義されている変数にアクセスしようとしたときに発生する可能性があります。
たとえば、次の例を考えてみましょう。
type User struct { Username string Password []byte Email string } func main() { users := []User{{"user1", []byte("password"), "user1@example.com"}, {"user2", []byte("password"), "user2@example.com"}} renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{ "lang": "en", "users": users, }) }
対応するテンプレート ファイル内、次のコードは範囲ループ内の lang 変数にアクセスしようとします:
{{ range .users }} <form action="/{{ .lang }}/users" method="POST"> <input type="text" name="Username" value="{{ .Username }}"> <input type="text" name="Email" value="{{ .Email }}"> </form> {{ end }}
ただし、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 }}
これにより、lang 変数に正しくアクセスし、必要な出力が生成されます。
以上がGo テンプレートの外側の範囲から変数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。