Lecture simultanée de plusieurs chaînes dans Golang
Lors de votre incursion dans le monde de Golang, vous pourriez être confronté à la tâche de créer un any-to -un canal où plusieurs goroutines alimentent une seule destination. Cet article examinera les stratégies pour y parvenir dans Golang.
Exemple de scénario
Considérons un scénario dans lequel deux goroutines, numgen1 et numgen2, génèrent simultanément des nombres et les écrivent dans canaux num1 et num2, respectivement. Votre objectif est de créer un processus distinct, addnum, qui additionne les nombres reçus de num1 et num2 et écrit les résultats dans une somme de canal.
Utilisation d'une instruction Select
Pour lire simultanément sur plusieurs canaux, vous pouvez utiliser une instruction de sélection. Dans le bloc de sélection, chaque cas représente un canal à partir duquel vous souhaitez lire. Le premier cas qui reçoit un message exécutera son bloc de code correspondant.
Voici un exemple utilisant l'instruction select :
func main() { c1 := make(chan int) c2 := make(chan int) out := make(chan int) go func(in1, in2 <-chan int, out chan<- int) { for { sum := 0 select { case sum = <-in1: sum += <-in2 case sum = <-in2: sum += <-in1 } out <- sum } }(c1, c2, out) }
Cette goroutine fonctionnera indéfiniment, lisant et additionnant continuellement les valeurs des canaux c1 et c2. Le canal de sortie permet de consommer les sommes. Pour terminer la goroutine, vous devrez fermer c1 et c2, puis fermer avant de quitter.
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!