Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Meluluskan Berbilang Nilai dengan Cekap Antara Templat Go?

Bagaimana untuk Meluluskan Berbilang Nilai dengan Cekap Antara Templat Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-09 14:09:16301semak imbas

How to Efficiently Pass Multiple Values Between Go Templates?

Melalui Pelbagai Nilai dari Templat ke Templat dalam Go: Panduan Komprehensif

Bagaimanakah saya boleh memindahkan berbilang nilai dari satu templat ke templat yang lain dengan cekap dalam Pergi? Pertimbangkan konteks yang disediakan:

  • Struktur bandar: {ID int, Name string, Regions []Region}
  • Region struct: {ID int, Name string, Shops []Destination, Sarjana []Master, EducationCenters []Destinasi}

Dalam fungsi utama, saya melaksanakan templat cities.gohtml dengan CityWithSomeData:

tpl.ExecuteTemplate(resWriter, "cities.gohtml", CityWithSomeData)

Dalam templat, saya berhasrat untuk mengulangi bandar dan wilayah untuk menghantar data kepada data templat lain:

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

Penyelesaian

Menurut dokumentasi templat Go, sintaks untuk Tindakan {{template}} membenarkan untuk menghantar hanya satu nilai data pilihan. Untuk menghantar berbilang nilai, kita perlu terlebih dahulu merangkumnya ke dalam satu nilai, seperti peta atau struktur.

Memandangkan menulis kod Go dalam templat tidak boleh dilaksanakan, kami boleh mendaftarkan fungsi tersuai untuk melaksanakannya tugas:

func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} {
    return map[string]interface{}{
        "Shops":      shops,
        "CityName":   cityName,
        "RegionName": regionName,
    }
}

Fungsi tersuai didaftarkan menggunakan Template.Funcs(). Kemudian, kami mengubah suai templat untuk memanggil fungsi 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}}

Akhir sekali, kod sampel yang menunjukkan konsep ini:

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

Pendekatan ini membolehkan penghantaran berbilang nilai yang cekap daripada satu templat ke satu templat lain dalam Go.

Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Berbilang Nilai dengan Cekap Antara Templat Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn