Нет: повторное закрытие канала Go вызывает panic. Закрытие nil-канала тоже приводит к panic, а чтение закрытого канала допустимо.
Можно ли закрыть канал дважды?
Нет: повторное закрытие канала Go вызывает panic. Закрытие nil-канала тоже приводит к panic, а чтение закрытого канала допустимо.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Нет: повторное закрытие канала Go вызывает panic. Закрытие nil-канала тоже приводит к panic, а чтение закрытого канала допустимо.
Владелец отправки должен координировать единственное закрытие после завершения всех producers. При нескольких отправителях обычно используют отдельного координатора, который ждёт их окончания.
Проверка «канал ещё открыт» не решает гонку между проверкой и close. sync.Once может защитить повторный close, но не предотвращает одновременную отправку в уже закрытый канал. Закрывать канал ради освобождения памяти не требуется.