Os timeouts são importantes para programas que se conectam a recursos externos ou que, de outra forma, precisam limitar o tempo de execução.
Implementar timeouts no Go é fácil e elegante graças aos canais e select.
Para o nosso exemplo, suponha que estejamos executando uma chamada externa que retorna seu resultado em um canal c1 após 2s. Observe que o canal é armazenado em buffer, portanto, o envio na goroutine não é bloqueador.
Este é um padrão comum para evitar vazamentos de goroutine caso o canal nunca seja lido.
Aqui está a seleção de implementação de um tempo limite. res := <-c1 aguarda o resultado e <-time.After aguarda um valor a ser enviado após o tempo limite de 1s.
Como a seleção continua com o primeiro recebimento que está pronto, usaremos o caso de tempo limite se a operação levar mais do que os 1s permitidos.