Ответ
В Go select позволяет ожидать нескольких операций с каналами. Он блокируется, пока один из его case не сможет выполниться, затем исполняет этот case. Если несколько case готовы, выбирается случайный.
Пример:
select {
case msg1 := <-ch1:
fmt.Println("Received", msg1)
case msg2 := <-ch2:
fmt.Println("Received", msg2)
case ch3 <- 42:
fmt.Println("Sent 42 to ch3")
default:
fmt.Println("No communication")
}
Особенности:
- Если нет
default,selectблокируется до срабатывания любогоcase defaultвыполняется, если ни один канал не готов- Порядок
caseне влияет на приоритет - Можно использовать для неблокирующих операций с
default