Maison > développement back-end > Golang > Comment les Goroutines de Go peuvent-elles imiter les générateurs de Python ?

Comment les Goroutines de Go peuvent-elles imiter les générateurs de Python ?

Mary-Kate Olsen
Libérer: 2024-11-09 15:30:02
original
851 Les gens l'ont consulté

How Can Go's Goroutines Mimic Python's Generators?

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)
    }
}
Copier après la connexion

Questions et réponses

  • Augmentation de la taille du tampon : L'augmentation de la taille du tampon permet au producteur (fibonacci goroutine) pour envoyer plusieurs valeurs à la fois. Cela peut en effet améliorer les performances en réduisant les changements de contexte.
  • Gestion de la mémoire : La goroutine de Fibonacci continuera à fonctionner indéfiniment, gardant le canal ouvert. Lorsque la goroutine principale se termine, le canal ne sera pas récupéré, ce qui entraînera une fuite de mémoire.

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)
    }
}
Copier après la connexion

Dans cette version modifiée :

  • La fonction génératrice fib prend un entier n comme argument et renvoie un canal.
  • La goroutine créée dans fib ferme le canal après avoir généré tous les nombres de Fibonacci jusqu'à n.
  • La goroutine principale parcourt le canal jusqu'à ce qu'il soit fermé.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal