Accès aux paramètres d'URL dans une boucle de plage de modèles
Lorsque vous travaillez avec des modèles Go, il est essentiel de comprendre comment les données sont accessibles dans les boucles. Considérez le code et le modèle suivants :
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 }}
Dans ce scénario, vous pouvez rencontrer une erreur indiquant que le champ « lang » ne fait pas partie de la structure « Utilisateur ». Pour résoudre ce problème, nous pouvons exploiter le concept de « point » et la variable spéciale « $ ».
Comprendre Dot et $
Lorsqu'une boucle est invoquée, le le contenu du "point" (.) est affecté à la variable spéciale "$". Cela nous permet d'accéder aux données de l'extérieur de la boucle dans le bloc de plage. Par exemple, pour accéder au paramètre "lang", nous pouvons utiliser "$" comme suit :
{{ range .users }} <form action="/{{ $.lang }}/users" method="POST"> <input type="text" name="Username" value="{{ .Username }}"> <input type="text" name="Email" value="{{ .Email }}"> </form> {{ end }}
Cette approche résout avec succès le problème, vous permettant d'accéder au paramètre "lang" dans la boucle de plage. Le comportement de "dot" et "$" est documenté dans le guide des modèles Go.
Approches alternatives
Si vous rencontrez des scénarios dans lesquels l'accès aux données à l'aide de "$" est difficile en raison des boucles imbriquées, envisagez des options alternatives telles que l'attribution d'un « point » à une variable temporaire ou l'utilisation de l'instruction « with » pour créer une portée dédiée à l'attribution de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!