テンプレート範囲ループ内の URL パラメーターへのアクセス
Go テンプレートを使用する場合、ループ内でデータにどのようにアクセスできるかを理解することが重要です。次のコードとテンプレートを考えてみましょう:
type User struct { Username string Password []byte Email string } func main() { users := []User{ {Username: "Alice", Email: "alice@example.com"}, {Username: "Bob", Email: "bob@example.com"}, } renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{ "lang": chi.URLParam(r, "lang"), "users": users, }) }
{{ 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」構造体の一部ではないことを示すエラーが発生する可能性があります。これに対処するために、「ドット」の概念と特殊変数「$」を利用できます。
ドットと $
ループが呼び出されるとき、 「ドット」(.)の内容が特殊変数「$」に代入されます。これにより、範囲ブロック内のループの外側からデータにアクセスできるようになります。たとえば、「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」パラメータにアクセスできるようになります。 「ドット」と「$」の動作については、Go テンプレート ガイドに記載されています。
代替アプローチ
「$」を使用してデータにアクセスするシナリオが発生した場合は、ネストされたループのため困難な場合は、「ドット」を一時変数に割り当てるか、「with」ステートメントを使用して割り当て専用のスコープを作成するなどの代替オプションを検討してください。データ。
以上がGo でテンプレート範囲ループ内の URL パラメーターにアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。