Skop Pembolehubah Gelung Julat dalam Templat Go
Dalam templat Go, adalah penting untuk memahami cara pembolehubah yang diisytiharkan dalam gelung julat berinteraksi dengan pembolehubah yang diisytiharkan di luar gelung.
Pertimbangkan kod berikut coretan:
{{ $prevDate := "" }} {{ range $post := .Posts }} {{ if ne $prevDate $post.Date }} <div>
Matlamatnya adalah untuk membandingkan tarikh siaran semasa dengan tarikh siaran sebelumnya untuk memaparkan pengepala bahagian apabila tarikh berubah. Walau bagaimanapun, nilai $prevDate nampaknya ditetapkan semula kepada rentetan kosong pada permulaan setiap lelaran.
Isunya terletak pada skop pembolehubah dalam gelung julat. Setiap lelaran gelung mencipta pembolehubah berbayang baharu $prevDate. Ini bermakna nilai $prevDate yang diisytiharkan di luar gelung tidak diubah suai, manakala pembolehubah berbayang diubah suai dalam gelung.
Oleh itu, masalah boleh diselesaikan dengan menggunakan alternatif berikut:
Penyelesaian #1: Fungsi Berdaftar
Daftar fungsi yang mengambil indeks semasa dan mengembalikan tarikh siaran sebelumnya, jika tersedia:
func PrevDate(i int) string { if i == 0 { return "" } return posts[i-1].Date }
Kemudian, gunakan fungsi dalam templat:
{{range $index, $post := .Posts}} {{$prevDate := PrevDate $index}} {{end}}
Penyelesaian #2: Kaedah Jenis Catatan
Tambahkan kaedah pada jenis Siaran untuk mendapatkan yang sebelumnya tarikh:
func (p *Posts) PrevDate(i int) string { if i == 0 { return "" } return (*p)[i-1].Date }
Kemudian, gunakan kaedah dalam templat:
{{range $index, $post := .Posts}} {{$prevDate := $.Posts.PrevDate $index}} {{end}}
Dengan menggunakan penyelesaian ini, pembolehubah $prevDate boleh mengekalkan nilainya merentas lelaran gelung julat, membenarkan anda untuk membandingkan tarikh siaran dengan berkesan.
Atas ialah kandungan terperinci Bagaimana Mengurus Skop Pembolehubah dengan Betul dalam Gelung Julat Templat Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!