Как работать с пустыми каналами с помощью Select

«Как работать с пустыми каналами с помощью Select» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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