Übergabe mehrerer Werte von Vorlage zu Vorlage in Go: Eine umfassende Anleitung
Wie kann ich in Go mehrere Werte kompetent von einer Vorlage auf eine andere übertragen? Gehen? Betrachten Sie den bereitgestellten Kontext:
tpl.ExecuteTemplate(resWriter, "cities.gohtml", CityWithSomeData)
{{range .}} {{$city:=.Name}} {{range .Regions}} {{$region:=.Name}} {{template "data" .Shops $city $region}} {{end}} {{end}}
Lösung
Laut Go-Vorlagendokumentation erlaubt die Syntax für die Aktion {{template}} die Übergabe nur eines optionalen Datenwerts. Um mehrere Werte zu übergeben, müssen wir sie zunächst in einen einzelnen Wert kapseln, beispielsweise eine Karte oder eine Struktur.Da das Schreiben von Go-Code innerhalb einer Vorlage nicht möglich ist, können wir eine benutzerdefinierte Funktion registrieren, um dies auszuführen Aufgabe:func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} { return map[string]interface{}{ "Shops": shops, "CityName": cityName, "RegionName": regionName, } }
{{define "data"}} City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}} {{end}} {{- range . -}} {{$city:=.Name}} {{- range .Regions -}} {{$region:=.Name}} {{- template "data" (Wrap .Shops $city $region) -}} {{end}} {{- end}}
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) }
Das obige ist der detaillierte Inhalt vonWie kann man mehrere Werte effizient zwischen Go-Vorlagen übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!