Junior — Middle
O comportamento da função select em Go é previsível ou aleatório?
sobes.tech IA
Resposta da IA
O comportamento da função select em Go é parcialmente previsível, mas no caso de vários canais estarem prontos ao mesmo tempo, a seleção do canal ocorre de forma aleatória (aleatória). Isto é feito para evitar bloqueios e garantir uma distribuição justa.
Se apenas um canal estiver pronto, select irá escolhê-lo. Se nenhum canal estiver pronto e não houver um default, select fica bloqueado.
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 os canais estiverem prontos, a escolha entre eles será aleatória.