Можно ли закрыть канал дважды?

Нет: повторное закрытие канала Go вызывает panic. Закрытие nil-канала тоже приводит к panic, а чтение закрытого канала допустимо.

Короткий ответ

Что ответить на собеседовании

Нет: повторное закрытие канала Go вызывает panic. Закрытие nil-канала тоже приводит к panic, а чтение закрытого канала допустимо.

Подробный разбор

Ответ с пояснениями

Нет: повторное закрытие канала Go вызывает panic. Закрытие nil-канала тоже приводит к panic, а чтение закрытого канала допустимо.

Владелец отправки должен координировать единственное закрытие после завершения всех producers. При нескольких отправителях обычно используют отдельного координатора, который ждёт их окончания.

Проверка «канал ещё открыт» не решает гонку между проверкой и close. sync.Once может защитить повторный close, но не предотвращает одновременную отправку в уже закрытый канал. Закрывать канал ради освобождения памяти не требуется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее