Heim > Backend-Entwicklung > Golang > Wie erstelle ich idiomatische Iteratoren in Go?

Wie erstelle ich idiomatische Iteratoren in Go?

Linda Hamilton
Freigeben: 2024-12-06 16:13:15
Original
591 Leute haben es durchsucht

How to Create Idiomatic Iterators in Go?

Idiomatische Iteratoren in Go erstellen

Iteratoren sind für die praktische und ausdrucksstarke Iteration über Sammlungen unerlässlich. Während Kanäle auf den ersten Blick wie eine praktikable Option erscheinen mögen, schränken ihr Push-Modell und Bedenken hinsichtlich Speicherverlusten ihren Nutzen ein.

Idiomatische Ansätze

Abschlüsse:

Abschlüsse bieten eine unkomplizierte Methode zur Implementierung von Iteratoren. Durch das Erfassen einer Variablen innerhalb einer Funktion kann die Funktion als Iterator verwendet werden, wobei jeder Aufruf die Variable erhöht und ihren Wert zurückgibt. Zum Beispiel:

import "fmt"

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

Benannte Typen mit Methoden:

Ein anderer Ansatz besteht darin, einen benannten Typ mit einer Methode zu definieren, die über die Sammlung iteriert. Diese Methode kann ihren internen Status aktualisieren und das nächste Element in der Sequenz zurückgeben. Zum Beispiel:

type even int

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

Kompromisse und Auswahl:

Die Wahl des Ansatzes hängt von den spezifischen Anforderungen ab. Kanäle eignen sich hervorragend für gleichzeitige Szenarien, Abschlüsse bieten Flexibilität und Benutzerfreundlichkeit, während benannte Typen Klarheit und Kapselung bieten.

Iteratoren verketten

Funktionale Programmierkonzepte können genutzt werden, um mehrere Iteratoren für komplexe Transformationen zu verketten. Funktionen können zu Iteratoren zusammengefasst werden, was Operationen wie Zuordnen, Filtern und Falten ermöglicht.

Hier ist ein Beispiel für die Verkettung von Iteratoren mithilfe von Abschlüssen:

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())
}
Nach dem Login kopieren

Durch Nutzung der Flexibilität und Erweiterbarkeit von Gos Funktionstypen und Iteratoren können mühelos kombiniert werden, um Sammlungen effektiv umzuwandeln und zu verarbeiten.

Das obige ist der detaillierte Inhalt vonWie erstelle ich idiomatische Iteratoren in Go?. 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