"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 > Comment pouvez-vous réaliser une lecture simultanée à partir de plusieurs canaux dans Golang ?

Comment pouvez-vous réaliser une lecture simultanée à partir de plusieurs canaux dans Golang ?

Publié le 2024-11-24
Parcourir:976

How Can You Achieve Concurrent Reading from Multiple Channels in Golang?

Lecture simultanée à partir de plusieurs canaux dans Golang

Dans Golang, il est possible de créer un canal « n'importe lequel à un », où plusieurs goroutines peuvent écrire simultanément sur le même canal. Voyons comment obtenir cette fonctionnalité.

Une approche consiste à utiliser une instruction select, qui vous permet d'attendre que plusieurs canaux reçoivent des données :

func main() {
  // Create input channels
  c1 := make(chan int)
  c2 := make(chan int)
  // Create output channel
  out := make(chan int)

  // Start a goroutine that reads from both input channels and sums the received values
  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 s'exécute indéfiniment, lisant les deux canaux et envoyant la somme des valeurs reçues au canal de sortie. Pour terminer la goroutine, il est inutile de fermer les deux canaux d'entrée.

Comme approche alternative, vous pouvez utiliser le code suivant :

func addnum(num1, num2, sum chan int) {
  done := make(chan bool)

  go func() {
    n1 := <-num1
    done <- true        // Signal completion of one channel read
  }()

  n2 := <-num2             // Read from the other channel
  <-done                   // Wait for the first read to complete

  sum <- n1   n2
}

Cette fonction utilise un canal "terminé" distinct pour avertir lorsqu'un canal a été lu avec succès. Cependant, cette approche peut être moins flexible, car elle nécessite de modifier les goroutines qui écrivent sur les canaux d'entrée.

L'approche appropriée dépend des exigences spécifiques de votre application. Quelle que soit la méthode que vous choisissez, les fonctionnalités de concurrence de Golang fournissent des outils puissants pour gérer plusieurs canaux simultanément.

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