Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Melaksanakan Iterators secara Idiomatik dalam Go?

Bagaimanakah Saya Boleh Melaksanakan Iterators secara Idiomatik dalam Go?

Patricia Arquette
Lepaskan: 2024-12-02 04:48:13
asal
383 orang telah melayarinya

How Can I Idiomatically Implement Iterators in Go?

Adakah Terdapat Pelaksanaan Iterator Idiomatik dalam Go?

Saluran, mengingatkan iterator, menawarkan lelaran melalui kata kunci julat. Walau bagaimanapun, ketidakupayaan untuk keluar dari gelung tersebut tanpa mencipta kebocoran goroutine mengehadkan kegunaannya. Mencari corak lelaran yang lebih idiomatik, pembangun telah mengemukakan soalan tentang cara mengulang secara ekspresif dan menggabungkan iterator menggunakan operator seperti peta, penapis dan pengurangan.

Pendekatan Berasaskan Penutupan

Walaupun kemudahan saluran, penutupan selalunya terbukti lebih sesuai. Penutupan membenarkan penciptaan iterator yang menjana nilai secara berurutan. Berikut ialah contoh mencipta lelaran untuk nombor genap menggunakan penutupan:

func newEven() func() int {
    n := 0
    return func() int {
        n += 2
        return n
    }
}
Salin selepas log masuk

Pendekatan Berasaskan Kaedah

Jika penutupan tidak sesuai dengan keinginan anda, anda boleh menggunakan jenis bernama dengan kaedah:

type even int

func (e *even) next() int {
    *e += 2
    return int(*e)
}
Salin selepas log masuk

Perdagangan dan Rantaian

Pilihan antara penutupan dan kaedah melibatkan pertukaran. Penutupan lebih fleksibel, manakala kaedah menyediakan struktur yang lebih jelas.

Perangkaian adalah mudah dalam Go berkat sifat fungsi kelas pertama. Contoh berikut menunjukkan cara merantai penjana nombor genap dengan fungsi kuasa dua:

func mapInt(g intGen, f func(int) int) intGen {
    return func() int {
        return f(g())
    }
}

func square(i int) int {
    return i * i
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Iterators secara Idiomatik dalam 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