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.