Go · Intermediário · Inglês · Técnico
select
Comando que espera em várias operações de channel ao mesmo tempo e executa a primeira que ficar pronta. Com default, nunca bloqueia; sem ele, espera.
Onde usar
Usado para combinar receber dados com timeout ou cancelamento. Se várias opções estão prontas, Go escolhe uma aleatoriamente, então não dependa da ordem dos cases.
Em código
select {
case v := <-dados:
fmt.Println("recebi", v)
case <-time.After(time.Second):
fmt.Println("timeout")
}Exemplos
Use select to wait for data or a timeout.
Use select para esperar dados ou um timeout.
If two cases are ready, select picks one at random.
Se dois cases estão prontos, o select escolhe um ao acaso.
Cuidado
Não é o select do SQL nem o switch: cada case é uma operação de envio ou recebimento em channel.
Origem
Do latim seligere, 'escolher'.