Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menetapkan Semula Pembolehubah dengan Betul dalam Gelung Julat Templat Go?

Bagaimana untuk Menetapkan Semula Pembolehubah dengan Betul dalam Gelung Julat Templat Go?

DDD
Lepaskan: 2024-12-20 09:18:12
asal
553 orang telah melayarinya

How to Properly Reset Variables in Go Template Range Loops?

Menetapkan Semula Pembolehubah dalam Gelung Julat Templat Go

Dalam gelung julat templat Go, pembolehubah yang diisytiharkan di luar gelung tidak ditetapkan semula pada setiap lelaran. Walau bagaimanapun, mengisytiharkan semula pembolehubah dalam gelung mencipta pembolehubah baharu yang diskop hanya dalam gelung itu, yang berpotensi menyebabkan gelagat yang tidak dijangka.

Pertimbangkan contoh berikut:

{{ $prevDate := "" }}
{{ range $post := .Posts }}
    {{ if ne $prevDate $post.Date }}
        <div class="post-date">Posts dated: {{ $post.Date }}</div>
    {{ end }}
    <div class="post-content">{{ $post.Content }}</div>
    {{ $prevDate := $post.Date }}
{{ end }}
Salin selepas log masuk

Di sini, $prevDate nampaknya set semula kepada rentetan kosong pada permulaan setiap lelaran gelung. Walau bagaimanapun, ini bukan disebabkan oleh mekanisme set semula. Sebaliknya, pembolehubah baharu $prevDate sedang diisytiharkan semula dalam gelung, mengatasi pembolehubah luar.

Penyelesaian

Untuk mengelakkan isu ini, adalah penting untuk menggunakan yang betul skop untuk pembolehubah dalam gelung julat. Terdapat dua penyelesaian yang disyorkan:

Penyelesaian 1: Menggunakan Fungsi Berdaftar

Anda boleh mendaftarkan fungsi yang menerima indeks gelung dan mengembalikan nilai yang dikehendaki daripada gelung sebelumnya lelaran. Contohnya:

func PrevDate(i int) string {
    if i == 0 {
        return ""
    }
    return posts[i-1].Date
}

// Registering the function:
var yourTempl = template.Must(template.New("").
    Funcs(map[string]interface{}{"PrevDate": PrevDate}).
    Parse(yourStringTemplate))
Salin selepas log masuk

Dalam templat anda, anda boleh memanggil fungsi seperti ini:

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

Penyelesaian 2: Menggunakan Kaedah Catatan

Sebagai alternatif, anda boleh menambah kaedah pada jenis Siaran anda yang mengembalikan tarikh sebelumnya. Contohnya:

type Post struct {
    // Your Post type
    Date string
}

type Posts []Post

func (p *Posts) PrevDate(i int) string {
    if i == 0 {
        return ""
    }
    return (*p)[i-1].Date
}
Salin selepas log masuk

Dalam templat anda, anda boleh mengakses kaedah seperti ini:

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

Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Semula 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan