ホームページ  >  記事  >  バックエンド開発  >  Go テンプレートの外側の範囲から変数にアクセスするにはどうすればよいですか?

Go テンプレートの外側の範囲から変数にアクセスするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-09 03:36:02846ブラウズ

How to Access Variables from Outer Ranges in Go Templates?

エラー: 入れ子になった範囲を持つ 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 サイトの他の関連記事を参照してください。

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