Corak Iterator dalam Go
Corak Iterator ialah corak reka bentuk yang membolehkan anda mengulangi elemen dalam koleksi tanpa Mendedahkan asas perwakilan koleksi. Terdapat beberapa cara untuk membuat iterator dalam Go.
Saluran
Saluran ialah struktur data seperti lelaran. Anda boleh mengulangi saluran menggunakan kata kunci julat. Walau bagaimanapun, penggunaannya adalah terhad apabila didapati bahawa gelung ini tidak boleh dibatalkan tanpa bocor goroutine.
Penutupan
Penutupan biasanya lebih sesuai daripada saluran untuk mencipta iterator. Ia membolehkan anda menangkap pembolehubah dan mencipta fungsi yang keadaannya berterusan antara panggilan. Anda boleh menggunakan penutupan untuk mencipta iterator yang menjana nilai.
func newEven() func() int { n := 0 return func() int { n += 2 return n } }
Jenis Dinamakan
Anda juga boleh menggunakan jenis bernama dengan kaedah untuk mencipta iterator. Ini menyediakan cara yang lebih jelas dan selamat jenis untuk melintasi koleksi.
type even int func (e *even) next() int { *e += 2 return int(*e) }
Pelajar Berantai
Pelajar berantai mudah dilaksanakan dalam Go kerana fungsi ialah objek kelas pertama. Anda boleh menggunakan fungsi seperti peta dan penapis untuk memetakan atau menapis nilai lelaran.
func mapInt(g intGen, f func(int) int) intGen { return func() int { return f(g()) } } func square(i int) int { return i * i }
Kesimpulan
Tiada sesiapa yang dianggap sebagai cara idiomatik untuk mencipta iterator dalam Go. Anda boleh memilih kaedah yang paling sesuai dengan keperluan anda. Penutupan dan jenis yang dinamakan biasanya lebih sesuai untuk iterator yang memerlukan gelagat keadaan atau berantai, manakala saluran lebih sesuai untuk lintasan sekali sahaja.
Atas ialah kandungan terperinci Bagaimana Iterator Boleh Dilaksanakan dalam Go, dan Apakah Trade-off Mereka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!