Maison >développement back-end >Golang >Comment lire simultanément sur plusieurs canaux dans Golang ?

Comment lire simultanément sur plusieurs canaux dans Golang ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-07 10:31:03901parcourir

How do you read from multiple channels simultaneously in Golang?

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!

Déclaration:
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