Nil-канал — это переменная канала, которая была объявлена, но не инициализирована. В Go, когда канал объявляется без присваивания значения через make(), он по умолчанию становится nil.
Nil-канал демонстрирует блокирующее поведение при всех операциях:
Это делает nil-каналы полезными для намеренного отключения операций с каналами в select-выражениях.
func main() {
var ch chan int // nil-канал
select {
case ch <- 1:
fmt.Println("Sent to channel")
case <-time.After(1 * time.Second):
fmt.Println("Timed out")
}
}
В этом примере:
ch объявлен, но никогда не инициализирован через make(), поэтому остается nilcase ch <- 1 блокируется, потому что отправка в nil-канал всегда блокируется<-time.After(1 * time.Second) срабатывает по истечении таймаута, предотвращая бесконечную блокировкуTimed outNil-каналы обычно используются для:
Nil-канал отличается от пустого, но инициализированного канала. Канал, созданный через make(chan int), допускает отправку и получение, тогда как nil-канал безусловно блокирует все операции.
Nil-канал в Go сразу паникует при попытке отправить в него значение, без блокировки.
Новый — ещё не проверен сообществом
Вы