> Что происходит с горутиной, если она пытается записать в канал после ошибки? (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
Если горутина пытается записать в канал после возникновения ошибки, поведение зависит от типа ошибки и состояния канала:
-
Канал закрыт (closed channel): запись в закрытый канал вызывает панику (
panic: send on closed channel). Это необратимая ошибка, которая приведет к аварийному завершению горутины (если не перехваченаrecover). -
Канал равен nil: запись в nil-канал блокирует горутину навсегда (deadlock). Горутина зависает, не потребляя ресурсов процессора, но утекая памятью и не освобождая другие ресурсы.
-
Канал открыт, но ошибка в логике: если ошибка - это просто возвращаемое значение (например, из функции), а канал жив, то запись выполняется как обычно. Однако если ошибка сигнализирует о некорректном состоянии, игнорирование её может привести к отправке невалидных данных.
Рекомендация: всегда проверяйте ошибки перед записью в канал и используйте паттерн с отдельным каналом ошибок или контекстом для graceful shutdown. Например:
GOerrCh := make(chan error, 1)go func() {result, err := doWork()if err != nil {errCh <- errreturn}dataCh <- result}()
> Похожие задачи по Go
Когда можно закрыть канал при нескольких писателях и читателях в Go?
Как организовать прослушивание канала в отдельной горутине, чтобы избежать блокировок?
Что делать, если нельзя писать логи внутри функции fetch, а можно только в функции main?
Как реализовать graceful shutdown в Go?
> Похожие задачи по backend
Когда можно закрыть канал при нескольких писателях и читателях в Go?
Как организовать прослушивание канала в отдельной горутине, чтобы избежать блокировок?
Что делать, если нельзя писать логи внутри функции fetch, а можно только в функции main?
Как реализовать graceful shutdown в Go?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью