Home > Article > Backend Development > How Can Go's Goroutines Mimic Python's Generators?
Generators in Go: A Pythonic Approach
In the Tour of Go, Question 66 introduces goroutines as a powerful concurrency mechanism. But they can also mimic Python's generators.
Consider the following implementation of a Fibonacci generator using goroutines:
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) } }
Questions and Answers
To overcome these issues, you can use a more Pythonic approach:
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 this modified version:
This approach prevents memory leaks and allows for a more flexible generation of Fibonacci numbers.
The above is the detailed content of How Can Go's Goroutines Mimic Python's Generators?. For more information, please follow other related articles on the PHP Chinese website!