Heim > Backend-Entwicklung > Golang > Wie kann ich Iteratoren in Go idiomatisch implementieren?

Wie kann ich Iteratoren in Go idiomatisch implementieren?

Patricia Arquette
Freigeben: 2024-12-02 04:48:13
Original
386 Leute haben es durchsucht

How Can I Idiomatically Implement Iterators in Go?

Gibt es eine idiomatische Iterator-Implementierung in Go?

Kanäle, die an Iteratoren erinnern, bieten Iteration über das Schlüsselwort „range“ an. Die Unfähigkeit, aus solchen Schleifen auszubrechen, ohne dass Goroutine-Lecks entstehen, schränkt jedoch ihren Nutzen ein. Auf der Suche nach einem idiomatischeren Iteratormuster haben Entwickler Fragen dazu gestellt, wie man ausdrucksstark iteriert und Iteratoren mit Operatoren wie Map, Filter und Reduce kombiniert.

Abschlussbasierter Ansatz

Obwohl Kanäle praktisch sind, erweisen sich Verschlüsse oft als besser geeignet. Abschlüsse ermöglichen die Erstellung von Iteratoren, die Werte nacheinander generieren. Hier ist ein Beispiel für die Erstellung eines Iterators für gerade Zahlen mithilfe eines Abschlusses:

func newEven() func() int {
    n := 0
    return func() int {
        n += 2
        return n
    }
}
Nach dem Login kopieren

Methodenbasierter Ansatz

Wenn Ihnen Abschlüsse nicht gefallen, können Sie dies tun Verwenden Sie einen benannten Typ mit einer Methode:

type even int

func (e *even) next() int {
    *e += 2
    return int(*e)
}
Nach dem Login kopieren

Kompromisse und Verkettung

Die Wahl zwischen Verschlüssen und Methoden erfordert Kompromisse. Abschlüsse sind flexibler, während Methoden eine explizitere Struktur bieten.

Die Verkettung ist in Go dank der erstklassigen Natur der Funktionen unkompliziert. Das folgende Beispiel zeigt, wie man einen geraden Zahlengenerator mit einer Quadrierungsfunktion verkettet:

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

func square(i int) int {
    return i * i
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich Iteratoren in Go idiomatisch implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage