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