Sobes.tech
Junior — Middle

É possível receber valores de um canal em várias goroutines ao mesmo tempo?

sobes.tech IA

Resposta da IA

Sim, várias goroutines podem receber valores de um mesmo canal em Go ao mesmo tempo. Os canais em Go suportam múltiplas operações de leitura e escrita, permitindo que várias goroutines leiam de um mesmo canal em paralelo.

No entanto, é importante notar que se várias goroutines lerem de um mesmo canal, cada valor será recebido por apenas uma delas — os valores não são duplicados. Isso é útil para distribuir trabalho entre goroutines (pool de trabalhadores).

Exemplo:

ch := make(chan int)

// Iniciar várias goroutines que leem do canal
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Goroutine %d recebeu %d\n", id, val)
        }
    }(i)
}

// Enviar dados para o canal
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

Neste exemplo, os valores do canal são distribuídos entre as três goroutines.