Maison > développement back-end > Golang > Comment transmettre efficacement plusieurs valeurs entre les modèles Go ?

Comment transmettre efficacement plusieurs valeurs entre les modèles Go ?

Mary-Kate Olsen
Libérer: 2024-12-09 14:09:16
original
241 Les gens l'ont consulté

How to Efficiently Pass Multiple Values Between Go Templates?

Passer plusieurs valeurs d'un modèle à l'autre dans Go : un guide complet

Comment puis-je transférer efficacement plusieurs valeurs d'un modèle à un autre dans Aller? Considérez le contexte fourni :

  • Structure de la ville : {ID int, Name string, Regions []Region}
  • Region struct : {ID int, Name string, Shops []Destination, Masters []Master, EducationCenters []Destination}

Dans la fonction principale, j'exécute un modèle villes.gohtml avec un CityWithSomeData :

tpl.ExecuteTemplate(resWriter, "cities.gohtml", CityWithSomeData)
Copier après la connexion

Dans le modèle, mon objectif est de parcourir les villes et les régions pour transmettre des données à un autre modèle de données :

{{range .}}
        {{$city:=.Name}}
            {{range .Regions}}
                      {{$region:=.Name}}
                      {{template "data" .Shops $city $region}}
            {{end}}
{{end}}
Copier après la connexion

Solution

Selon la documentation du modèle Go, la syntaxe de l'action {{template}} permet de transmettre une seule valeur de données facultative. Pour transmettre plusieurs valeurs, nous devons d'abord les encapsuler dans une seule valeur, telle qu'une carte ou une structure.

Comme il n'est pas possible d'écrire du code Go dans un modèle, nous pouvons enregistrer une fonction personnalisée pour effectuer cela. tâche :

func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} {
    return map[string]interface{}{
        "Shops":      shops,
        "CityName":   cityName,
        "RegionName": regionName,
    }
}
Copier après la connexion

Les fonctions personnalisées sont enregistrées à l'aide de Template.Funcs(). Ensuite, nous modifions le modèle pour appeler la fonction Wrap() :

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

Enfin, un exemple de code démontrant ces concepts :

t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{
    "Wrap": Wrap,
}).Parse(src))
CityWithSomeData = [...cities]
if err := t.ExecuteTemplate(os.Stdout, "cities.gohtml", CityWithSomeData); err != nil {
    panic(err)
}
Copier après la connexion

Cette approche permet le passage efficace de plusieurs valeurs d'un modèle à un autre dans 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.cn
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