Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencipta Iterator Idiomatik dalam Go?

Bagaimana untuk Mencipta Iterator Idiomatik dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-12-06 16:13:15561semak imbas

How to Create Idiomatic Iterators in Go?

Mencipta Iterators Idiomatik dalam Go

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.

Pendekatan Idiomatik

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.

Pelajar Rantaian

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!

Kenyataan:
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