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
Mary-Kate OlsenOriginal
2024-12-09 14:09:16300Durchsuche

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)
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}}

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,
    }
}
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}}
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)
}
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!

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