Iterators adalah penting untuk mengulang koleksi dengan cara yang mudah dan ekspresif. Walaupun saluran mungkin pada mulanya kelihatan seperti pilihan yang berdaya maju, model tolaknya dan kebimbangan kebocoran memori mengehadkan kegunaannya.
Penutupan:
Penutupan menawarkan kaedah yang mudah untuk melaksanakan iterator. Dengan menangkap pembolehubah dalam fungsi, fungsi itu boleh digunakan sebagai lelaran, dengan setiap panggilan menambah pembolehubah dan mengembalikan nilainya. Contohnya:
import "fmt" func newEven() func() int { n := 0 return func() int { n += 2 return n } }
Jenis Dinamakan dengan Kaedah:
Pendekatan lain ialah mentakrifkan jenis bernama dengan kaedah yang berulang ke atas koleksi. Kaedah ini boleh mengemas kini keadaan dalamannya dan mengembalikan elemen seterusnya dalam jujukan. Contohnya:
type even int func (e *even) next() int { *e += 2 return int(*e) }
Perdagangan dan Pemilihan:
Pilihan pendekatan bergantung pada keperluan khusus. Saluran cemerlang untuk senario serentak, penutupan memberikan fleksibiliti dan kemudahan penggunaan, manakala jenis yang dinamakan menawarkan kejelasan dan enkapsulasi.
Konsep pengaturcaraan berfungsi boleh dimanfaatkan untuk merantai pelbagai iterator untuk transformasi yang kompleks. Fungsi boleh digubah menjadi iterator, membenarkan operasi seperti pemetaan, penapisan dan lipatan.
Berikut ialah contoh iterator rantai menggunakan penutupan:
import "fmt" type intGen func() int func newEven() intGen { n := 0 return func() int { n += 2 return n } } func mapInt(g intGen, f func(int) int) intGen { return func() int { return f(g()) } } func square(i int) int { return i * i } func main() { gen := mapInt(newEven(), square) fmt.Println(gen()) fmt.Println(gen()) fmt.Println(gen()) }
Dengan menggunakan fleksibiliti dan kebolehlanjutan Go's jenis fungsi, iterator boleh digabungkan dengan mudah untuk mengubah dan memproses koleksi dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Iterator Idiomatik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!