Select esperas em vários canais. Isso pode ser combinado com goroutines. Select é como a instrução switch, mas para canais.
Por exemplo, duas rotinas são iniciadas simultaneamente e cada uma grava dados em um canal. Por ser executado simultaneamente, pode acontecer que uma tarefa seja concluída antes da outra.
select {
case msg1 := <- ch1:
// ...
case <- ch2:
// ...
}
A instrução select fará com que o programa espere que ambas as tarefas sejam concluídas, mas isso não significa que ambas as tarefas sejam sempre concluídas em ordem cronológica.