Back to questions
Senior
8
Что будет, если закрыть уже закрытый канал? Если писать в nil канал?
Companies where asked
Lenta Tech
Answer from AI
sobes.tech 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 и не закрыт.