Générateurs en Go : une approche pythonique
Dans le Tour of Go, la question 66 présente les goroutines comme un puissant mécanisme de concurrence. Mais ils peuvent aussi imiter les générateurs de Python.
Considérons l'implémentation suivante d'un générateur de Fibonacci utilisant des 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 et réponses
Pour surmonter ces problèmes, vous pouvez utiliser une approche plus pythonique :
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) } }
Dans cette version modifiée :
Cette approche évite les fuites de mémoire et permet une génération plus flexible de nombres de Fibonacci.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!