Maison > développement back-end > Golang > le corps du texte

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

Susan Sarandon
Libérer: 2024-10-24 07:43:29
original
538 Les gens l'ont consulté

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>
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!