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 :
Dans la fonction principale, j'exécute un modèle villes.gohtml avec un CityWithSomeData :
tpl.ExecuteTemplate(resWriter, "cities.gohtml", CityWithSomeData)
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}}
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, } }
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}}
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) }
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!