Maison >développement back-end >Golang >Comment accéder aux champs Struct dans les modèles HTML lors de l'utilisation de Maps in Go ?
Dans le package html/template de Go, vous pouvez rencontrer des défis lors de l'accès aux champs d'une structure stockée comme valeur dans une carte. Cet article fournit une solution à ce problème, vous permettant de récupérer et d'afficher des champs individuels de la structure dans vos modèles.
Considérez l'exemple suivant, où nous définissons une structure Task :
<code class="go">type Task struct { Cmd string Args []string Desc string }</code>
Nous initialisons une carte avec la structure Task comme valeurs et les chaînes comme clés :
<code class="go">var taskMap = map[string]Task{ "find": Task{ Cmd: "find", Args: []string{"/tmp/"}, Desc: "find files in /tmp dir", }, "grep": Task{ Cmd: "grep", Args: []string{"foo", "/tmp/*", "-R"}, Desc: "grep files match having foo", }, }</code>
Maintenant, nous voulons analyser une page HTML en utilisant les données taskMap en utilisant html/template :
<code class="go">func listHandle(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("index.tmpl") t.Execute(w, taskMap) }</code>
Voici le modèle correspondant, index.tmpl :
<code class="html"><html> {{range $k, $v := .}} <li>Task Name: {{$k}}</li> <li>Task Value: {{$v}}</li> <li>Task Description: {{$v.Desc}}</li> {{end}} </html></code>
Bien que l'accès aux variables $k et $v à partir de la carte fonctionne comme prévu, l'accès au champ Desc à l'aide de {{$v.Desc}} échoue . Pour résoudre ce problème, nous devons nous assurer que les champs auxquels nous souhaitons accéder dans le modèle sont exportés. Dans Go, les champs sont exportés lorsqu'ils commencent par une lettre majuscule.
Modifiez la structure Task pour exporter le champ Desc :
<code class="go">type Task struct { Cmd string Args []string Desc string }</code>
Mettre à jour la carte avec le champ Desc exporté :
<code class="go">var taskMap = map[string]Task{ "find": Task{ Cmd: "find", Args: []string{"/tmp/"}, Desc: "find files in /tmp dir", }, "grep": Task{ Cmd: "grep", Args: []string{"foo", "/tmp/*", "-R"}, Desc: "grep files match having foo", }, }</code>
Dans le modèle, mettez à jour la syntaxe pour référencer le champ Desc exporté :
<code class="html">{{range $k, $v := .}} <li>Task Name: {{$k}}</li> <li>Task Value: {{$v}}</li> <li>Task Description: {{$v.Desc}}</li> {{end}}</code>
En suivant ces étapes, vous pourrez accéder au struct champs dans vos modèles HTML, vous permettant d'afficher et d'utiliser facilement les données stockées dans vos cartes Go.
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!