Select statement — это управляющая конструкция, которая позволяет горутине ждать сразу на нескольких каналах одновременно. Она даёт возможность программе обрабатывать взаимодействие между разными каналами параллельно.
Select statement проверяет несколько каналов и выполняет первый готовый case:
select {
case value := <-channel1:
// Выполняется, когда channel1 отправляет данные
case channel2 <- value:
// Выполняется, когда channel2 готов принимать
default:
// Выполняется, если ни один канал не готов
}
default case предотвращает блокировку — он выполняется сразу, если ни один канал не готовtime.After()select {
case result := <-results:
fmt.Println(result)
case <-time.After(5 * time.Second):
fmt.Println("Operation timed out")
}
Select statement — это основа модели конкурентности Go, благодаря которой писать чистый и эффективный параллельный код становится значительно проще.
Оператор select блокируется на неопределённое время, пока не будет готов хотя бы один из его case'ов, если только не предусмотрен default case.
Новый — ещё не проверен сообществом
Вы