Generatoren in Go: Ein pythonischer Ansatz
In der Tour of Go stellt Frage 66 Goroutinen als leistungsstarken Parallelitätsmechanismus vor. Sie können aber auch die Generatoren von Python nachahmen.
Betrachten Sie die folgende Implementierung eines Fibonacci-Generators mithilfe von Goroutinen:
package main import "fmt" func fibonacci(c chan int) { x, y := 1, 1 for { c <- x x, y = y, x + y } } func main() { c := make(chan int) go fibonacci(c) for i := 0; i < 10; i++ { fmt.Println(<-c) } }
Fragen und Antworten
Um diese Probleme zu lösen, können Sie einen eher pythonischen Ansatz verwenden:
package main import "fmt" func fib(n int) chan int { c := make(chan int) go func() { x, y := 0, 1 for i := 0; i <= n; i++ { c <- x x, y = y, x + y } close(c) }() return c } func main() { for i := range fib(10) { fmt.Println(i) } }
In dieser modifizierten Version:
Dieser Ansatz verhindert Speicherlecks und ermöglicht eine flexiblere Generierung von Fibonacci-Zahlen.
Das obige ist der detaillierte Inhalt vonWie können die Goroutinen von Go die Generatoren von Python nachahmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!