"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo se puede lograr una lectura simultánea desde múltiples canales en Golang?

¿Cómo se puede lograr una lectura simultánea desde múltiples canales en Golang?

Publicado el 2024-11-24
Navegar:743

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

Leer desde múltiples canales simultáneamente en Golang

En Golang, es posible crear un canal "cualquiera a uno", donde Varias gorutinas pueden escribir en el mismo canal simultáneamente. Exploremos cómo lograr esta funcionalidad.

Un método es utilizar una instrucción select, que le permite esperar a que varios canales reciban datos:

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)
}

Esta rutina se ejecuta indefinidamente, leyendo de ambos canales y enviando la suma de los valores recibidos al canal de salida. Para finalizar la rutina, no es necesario cerrar ambos canales de entrada.

Como método alternativo, puede utilizar el siguiente código:

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
}

Esta función utiliza un canal "listo" separado para notificar cuando un canal se ha leído correctamente. Sin embargo, este enfoque puede ser menos flexible, ya que requiere modificar las rutinas que escriben en los canales de entrada.

El enfoque apropiado depende de los requisitos específicos de su aplicación. No importa qué método elija, las funciones de concurrencia de Golang brindan herramientas poderosas para manejar múltiples canales simultáneamente.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3