Что будет, если писать в закрытый канал?

В Go отправка данных в закрытый канал вызывает панику. Чтобы этого избежать, используют несколько подходов:

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

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

В Go отправка данных в закрытый канал вызывает панику. Чтобы этого избежать, используют несколько подходов:

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

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

В Go отправка данных в закрытый канал вызывает панику. Чтобы этого избежать, используют несколько подходов:

  1. Проверять, открыт ли канал, с помощью дополнительного флага

Обычно канал закрывается в одном месте, и используют булевскую переменную или mutex для отслеживания состояния.

  1. Использовать конструкцию с select и дополнительным каналом для сигнала закрытия

Пример:

select {
case ch <- value:
    // отправка успешна
case <-done:
    // канал закрыт, не отправляем
}
  1. Использовать recover для обработки паники

Но это менее предпочтительно, так как лучше предотвращать панику, чем ловить её.

  1. Закрывать канал только после того, как все отправители завершили работу

Это предотвращает попытки отправки в закрытый канал.

Итого, главное — контролировать жизненный цикл канала и синхронизировать закрытие с отправкой данных.

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

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

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

Подробнее