Go 中的生成器:Pythonic 方法
在 Go 之旅中,問題 66 引入了 Goroutines 作為強大的並發機制。但它們也可以模仿 Python 的生成器。
考慮以下使用goroutine 實現的斐波那契產生器:
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) } }
問題與解答
要克服這些問題,可以使用更Pythonic 的方法:
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) } }
在此修改版本中:
這種方法可以防止記憶體洩漏,並允許更靈活地產生斐波那契數。
以上是Go 的 Goroutines 如何模仿 Python 的生成器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!