Sobes.tech
Middle+

Em que ordem o operador select lê de vários canais?

sobes.tech IA

Resposta da IA

No Go, o operador select escolhe aleatoriamente um canal pronto (ready) se houver vários. Se nenhum canal estiver pronto, o select bloqueia (se não houver default).

A ordem de leitura de vários canais não é fixa nem garantida. Isto é feito para evitar bloqueios e garantir uma distribuição justa.

Exemplo:

select {
case msg1 := <-chan1:
    fmt.Println("Recebido de chan1:", msg1)
case msg2 := <-chan2:
    fmt.Println("Recebido de chan2:", msg2)
default:
    fmt.Println("Nenhum canal pronto")
}

Se ambos, chan1 e chan2, estiverem prontos, o Go escolherá aleatoriamente um deles.