Maison >développement back-end >Golang >Comment pouvez-vous réaliser une lecture simultanée à partir de plusieurs canaux dans 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. Explorons comment obtenir cette fonctionnalité.
Une approche consiste à utiliser une instruction select, qui vous permet d'attendre que plusieurs canaux reçoivent des données :
<code class="go">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) }</code>
Cette goroutine s'exécute indéfiniment, en lisant des deux canaux et envoyer 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 :
<code class="go">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 }</code>
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.
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!