Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengurus Skop Pembolehubah dengan Betul dalam Gelung Julat Templat Go?

Bagaimana Mengurus Skop Pembolehubah dengan Betul dalam Gelung Julat Templat Go?

Susan Sarandon
Lepaskan: 2024-12-27 01:14:10
asal
227 orang telah melayarinya

How to Properly Manage Variable Scope in Go Templates' Range Loops?

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

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

Kemudian, gunakan fungsi dalam templat:

{{range $index, $post := .Posts}}
    {{$prevDate := PrevDate $index}}
{{end}}
Salin selepas log masuk

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

Kemudian, gunakan kaedah dalam templat:

{{range $index, $post := .Posts}}
    {{$prevDate := $.Posts.PrevDate $index}}
{{end}}
Salin selepas log masuk

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!

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