Senior
Эгерде жабылган каналды жабсаңыз, эмне болот? Эгерде nil каналга жазсаңыз, эмне болот?
sobes.tech AI
AIден жооп
В 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 и не закрыт.