Maison >développement back-end >Golang >Comment transmettre plusieurs valeurs à l'action {{template}} des modèles Go ?

Comment transmettre plusieurs valeurs à l'action {{template}} des modèles Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-05 20:38:13769parcourir

How to Pass Multiple Values to Go Templates' {{template}} Action?

Passer plusieurs valeurs entre les modèles

Dans les modèles Go, l'action {{template}} ne prend qu'un seul argument facultatif. Pour transmettre plusieurs valeurs, elles doivent être encapsulées dans une seule valeur.

Encapsulation des données

Une approche consiste à utiliser une fonction wrapper qui accepte les valeurs souhaitées et renvoie un valeur unique. Par exemple, nous pourrions créer une fonction wrapper pour nos données de ville et de région :

func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} {
    return map[string]interface{}{
        "Shops":      shops,
        "CityName":   cityName,
        "RegionName": regionName,
    }
}

Enregistrement de la fonction Wrapper

Les fonctions personnalisées peuvent être enregistrées à l'aide de Template.Funcs (). Cela doit être fait avant d'analyser le modèle :

t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{
    "Wrap": Wrap,
}).Parse(src))

Modèle modifié

Le modèle peut ensuite être modifié pour appeler la fonction Wrap() et transmettre le résultat à le {{modèle}} action :

{{define "data"}}
    City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}}
{{end}}
{{- range . -}}
        {{$city:=.Name}}
        {{- range .Regions -}}
              {{$region:=.Name}}
              {{- template "data" (Wrap .Shops $city $region) -}}
        {{end}}
{{- end}}

Exemple

Voici un exemple utilisant les structures Ville et Région fournies dans la question :

t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{
    "Wrap": Wrap,
}).Parse(src))
CityWithSomeData := []City{
    {
        Name: "CityA",
        Regions: []Region{
            {Name: "CA-RA", Shops: []Destination{{"CA-RA-SA"}, {"CA-RA-SB"}}},
            {Name: "CA-RB", Shops: []Destination{{"CA-RB-SA"}, {"CA-RB-SB"}}},
        },
    },
    {
        Name: "CityB",
        Regions: []Region{
            {Name: "CB-RA", Shops: []Destination{{"CB-RA-SA"}, {"CB-RA-SB"}}},
            {Name: "CB-RB", Shops: []Destination{{"CB-RB-SA"}, {"CB-RB-SB"}}},
        },
    },
}
if err := t.ExecuteTemplate(os.Stdout, "cities.gohtml", CityWithSomeData); err != nil {
    panic(err)
}

Sortie :

City: CityA, Region: CA-RA, Shops: [{CA-RA-SA} {CA-RA-SB}]
City: CityA, Region: CA-RB, Shops: [{CA-RB-SA} {CA-RB-SB}]
City: CityB, Region: CB-RA, Shops: [{CB-RA-SA} {CB-RA-SB}]
City: CityB, Region: CB-RB, Shops: [{CB-RB-SA} {CB-RB-SB}]

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