ExpertiDict

Go · Intermediário · Inglês · Técnico

select

/sɪˈlɛkt/palavra-chave

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'.

Veja também

Todos os termos de Go