Sobes.tech
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.