Go のジェネレーター: Python 的アプローチ
Tour of Go の質問 66 では、強力な同時実行メカニズムとしてゴルーチンが紹介されています。ただし、Python のジェネレーターを模倣することもできます。
ゴルーチンを使用した次のフィボナッチ ジェネレーターの実装を考えてみましょう:
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) } }
質問と回答
これらの問題を解決するには、より Python 的なアプローチを使用できます。
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 のゴルーチンはどのようにして Python のジェネレーターを模倣できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。