Maison >développement back-end >Golang >Comment transmettre plusieurs valeurs à l'action {{template}} des modèles Go ?
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!