Sobes.tech
Junior — Middle

¿Se pueden obtener valores de un canal en varias goroutines al mismo tiempo?

sobes.tech AI

Respuesta de la IA

Sí, varias goroutines pueden leer simultáneamente valores de un mismo canal en Go. Los canales en Go soportan lectura y escritura múltiples, lo que permite que varias goroutines lean de un mismo canal en paralelo.

Sin embargo, es importante tener en cuenta que si varias goroutines leen de un mismo canal, cada valor será recibido solo por una de ellas — los valores no se duplican. Esto es útil para distribuir trabajo entre goroutines (pool de trabajadores).

Ejemplo:

ch := make(chan int)

// Iniciamos varias goroutines que leen del canal
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Goroutine %d recibió %d\n", id, val)
        }
    }(i)
}

// Enviamos datos al canal
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

En este ejemplo, los valores del canal se distribuyen entre las tres goroutines.