"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Modèle Fanin en Go

Modèle Fanin en Go

Publié le 2024-08-24
Parcourir:904

Fanin Pattern in Go

Jetons un coup d'œil au modèle de fan-in. Ceci est vraiment utile lorsque nous avons des données associées provenant de plusieurs threads que nous devons rassembler.

Par exemple, supposons que vous ayez effectué plusieurs appels d'API vers différents services et que vous deviez combiner les résultats.

Il s'agit d'un modèle très simple à mettre en œuvre, mais vous devez faire attention à la façon dont vous gérez les canaux. Il est facile de se retrouver dans une situation de blocage.

// produce is used to simulate the different data sources
func produce(id int) chan int {
    ch := make(chan int)
    go func() {
        for i := 0; i 



Ici, nous utilisons la fonction produire pour simuler les différentes sources. Ces canaux sources sont envoyés à la fonction fanin qui effectue l'opération de combinaison.

La fonction fanin crée le canal de sortie, puis lance une goroutine qui opère sur chaque entrée. Nous utilisons un WaitGroup pour indiquer quand toutes les sources d'entrée ont été combinées dans le canal de sortie.

Dans cet exemple simple, le thread principal parcourt simplement la sortie. Attention il n'y a aucune garantie sur la commande, les valeurs des 2 entrées sont mélangées.

Un point clé à souligner est que nous devons fermer le canal de sortie lorsque nous avons fini de combiner les entrées. L'opérateur de plage attendra indéfiniment une fois que le canal sera vide. Commentez la ligne close(output) et vous verrez que vous obtenez une condition de blocage.

Comment pouvons-nous améliorer cela ? Laissez-moi un commentaire ci-dessous.

Merci!

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

Déclaration de sortie Cet article est reproduit sur : https://dev.to/johnscode/fanin-pattern-in-go-5e5d?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3