Sobes.tech
Senior

Yopiq kanalni yopganingizda nima bo'ladi? Nil kanalga yozsangiz nima bo'ladi?

sobes.tech AI

AIdan javob

В Go:

  • Если попытаться закрыть уже закрытый канал, произойдёт паника (panic). Это приводит к аварийному завершению программы, если паника не будет обработана.

  • Если попытаться отправить значение в nil-канал, операция блокируется навсегда (deadlock), так как nil-канал не инициализирован и не может принимать значения.

Пример:

var ch chan int // ch == nil

// Отправка в nil-канал заблокирует горутину навсегда
// ch <- 1 // блокировка

// Закрытие nil-канала вызывает панику
// close(ch) // panic: close of nil channel

// Закрытие уже закрытого канала вызывает панику
c := make(chan int)
close(c)
// close(c) // panic: close of closed channel

Поэтому перед закрытием канала нужно быть уверенным, что он открыт, а перед отправкой — что канал не nil и не закрыт.