Maison > développement back-end > Golang > le corps du texte

Le modèle de pipeline dans Go

WBOY
Libérer: 2024-07-29 21:18:20
original
1019 Les gens l'ont consulté

The Pipeline Pattern in Go

Le modèle de pipeline est un moyen puissant de traiter les données à travers les étapes de manière simultanée. Chaque étape effectue une opération différente sur les données puis passe à l'étape suivante.

En utilisant des canaux pour transmettre les données, le modèle de pipeline peut améliorer les performances dans de nombreux cas.

L'idée est vraiment très simple, chaque étape parcourt un canal, extrayant des données jusqu'à ce qu'il n'en reste plus. Pour chaque élément de données, l'étape effectue son opération puis transmet le résultat à un canal de sortie et ferme enfin le canal lorsqu'il ne reste plus de données dans le canal d'entrée. La fermeture du canal est importante pour que l'étape en aval sache quand se terminer

Créez une séquence de nombres, doublez-les, puis filtrez les valeurs faibles et enfin imprimez-les sur la console.

func produce(num int) chan int {
    out := make(chan int)
    go func() {
        for i := 0; i < num; i++ {
            out <- rand.Intn(100)
        }
        close(out)
    }()
    return out
}

func double(input <-chan int) chan int {
    out := make(chan int)
    go func() {
        for value := range input {
            out <- value * 2
        }
        close(out)
    }()
    return out
}

func filterBelow10(input <-chan int) chan int {
    out := make(chan int)
    go func() {
        for value := range input {
            if value > 10 {
                out <- value
            }
        }
        close(out)
    }()
    return out
}

func print(input <-chan int) {
    for value := range input {
        fmt.Printf("value is %d\n", value)
    }
}

func main() {

    print(filterBelow10(double(produce(10))))

}
Copier après la connexion

Il existe évidemment une manière plus lisible de structurer main() :

func main() {

    input := produce(10)
        doubled := double(input)
    filtered := filterBelow10(doubled)
    print(filtered)

}
Copier après la connexion

Choisissez votre style en fonction de vos propres préférences.

Qu'ajouteriez-vous ici ? Laissez vos commentaires ci-dessous.

Merci !

Le code de cet article et de tous les articles de cette série peut être trouvé ici

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:dev.to
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal