Maison > Article > développement back-end > Comment accéder aux champs non structurés dans les modèles Go dans les boucles de plage ?
Accès aux champs non structurés dans les modèles Go dans les boucles de plage
Lors de l'itération sur une tranche de structures dans un modèle Go à l'aide de {{ range}}, vous pouvez rencontrer une erreur si vous tentez d'accéder à un champ qui ne fait pas directement partie de la structure. Par exemple, considérons l'exemple suivant :
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})
Dans le modèle HTML, vous pouvez rencontrer l'erreur suivante lorsque vous essayez d'accéder au champ {{ .lang }} :
`got template: can't evaluate field X in type Y (X not part of Y but stuck in a {{range}} loop)`
Cette erreur se produit car le champ {{ .lang }} ne fait pas partie de la structure User. Pour résoudre ce problème, vous pouvez utiliser la variable $, qui fait référence aux données attribuées à {{ . }} suite à l'invocation de la boucle {{range}}.
{{ range .users }} <form action="/{{ $.lang }}/users" method="POST"> <input type="text" name="Username" value="{{ .Username }}"> <input type="text" name="Email" value="{{ .Email }}"> </form> {{ end }}
Conformément à la documentation du modèle Go, lorsque la boucle {{range}} commence l'exécution, la variable $ est automatiquement définie sur les données argument passé au modèle. Dans ce cas, l'argument data est une carte qui inclut la clé lang. Par conséquent, vous pouvez utiliser $ pour accéder à la valeur de langue dans la boucle.
Si vous avez besoin d'accéder à plusieurs champs non-struct dans des boucles imbriquées, vous pouvez également utiliser l'instruction with ou les instructions d'affectation de variable pour attribuer {{ . }} à une variable différente.
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!