Sobes.tech
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 и не закрыт.