Heim > Backend-Entwicklung > Golang > Wie kann man mehrere Werte effizient zwischen Go-Vorlagen übergeben?

Wie kann man mehrere Werte effizient zwischen Go-Vorlagen übergeben?

Mary-Kate Olsen
Freigeben: 2024-12-09 14:09:16
Original
241 Leute haben es durchsucht

How to Efficiently Pass Multiple Values Between Go Templates?

Ü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:

  • Stadtstruktur: {ID int, Namenszeichenfolge, Regionen []Region}
  • Regionsstruktur: {ID int, Namenszeichenfolge, Geschäfte []Ziel, Masters []Master, EducationCenters []Destination🎜>
In der Hauptfunktion führe ich eine Vorlage „citys.gohtml“ mit einem aus CityWithSomeData:

tpl.ExecuteTemplate(resWriter, "cities.gohtml", CityWithSomeData)
Nach dem Login kopieren
Innerhalb der Vorlage möchte ich über die Städte und Regionen iterieren, um Daten an eine andere Vorlage zu übergeben. Daten:

{{range .}}
        {{$city:=.Name}}
            {{range .Regions}}
                      {{$region:=.Name}}
                      {{template "data" .Shops $city $region}}
            {{end}}
{{end}}
Nach dem Login kopieren

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,
    }
}
Nach dem Login kopieren
Benutzerdefinierte Funktionen werden mit Template.Funcs() registriert. Dann ändern wir die Vorlage, um die Wrap()-Funktion aufzurufen:

{{define "data"}}
    City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}}
{{end}}
{{- range . -}}
        {{$city:=.Name}}
        {{- range .Regions -}}
              {{$region:=.Name}}
              {{- template "data" (Wrap .Shops $city $region) -}}
        {{end}}
{{- end}}
Nach dem Login kopieren
Zum Schluss ein Beispielcode, der diese Konzepte demonstriert:

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)
}
Nach dem Login kopieren
Dieser Ansatz ermöglicht die effiziente Übergabe mehrerer Werte von einer Vorlage zur anderen in Go.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage