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 ?

Comment accéder aux champs Struct dans les modèles HTML lors de l'utilisation de Maps in Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 07:43:29623parcourir

How to Access Struct Fields in HTML Templates when Using Maps in Go?

Accès aux champs de structure dans les modèles HTML avec le html/template de 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.

Solution :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn