Ответ
В Go select позволяет обрабатывать операции с несколькими каналами. Для работы с пустыми каналами можно использовать default или проверять канал на nil.
Пример с default:
select {
case msg := <-ch:
fmt.Println("Received:", msg)
default:
fmt.Println("No message received")
}
Пример с nil-каналом:
var ch chan int // nil channel
select {
case <-ch: // Блокируется, если ch == nil
default:
fmt.Println("Channel is nil")
}
Важно:
- Чтение/запись в
nil-канал блокирует горутину навсегда defaultделаетselectнеблокирующим- В
selectможно обрабатывать сразу несколько каналов, включаяnil