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
Lepaskan: 2024-12-09 14:09:16
asal
241 orang telah melayarinya

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)
Salin selepas log masuk

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}}
Salin selepas log masuk

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,
    }
}
Salin selepas log masuk

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}}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan