> Что происходит с горутиной, если она пытается записать в канал после ошибки? (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

Если горутина пытается записать в канал после возникновения ошибки, поведение зависит от типа ошибки и состояния канала:

  1. Канал закрыт (closed channel): запись в закрытый канал вызывает панику (panic: send on closed channel). Это необратимая ошибка, которая приведет к аварийному завершению горутины (если не перехвачена recover).

  2. Канал равен nil: запись в nil-канал блокирует горутину навсегда (deadlock). Горутина зависает, не потребляя ресурсов процессора, но утекая памятью и не освобождая другие ресурсы.

  3. Канал открыт, но ошибка в логике: если ошибка - это просто возвращаемое значение (например, из функции), а канал жив, то запись выполняется как обычно. Однако если ошибка сигнализирует о некорректном состоянии, игнорирование её может привести к отправке невалидных данных.

Рекомендация: всегда проверяйте ошибки перед записью в канал и используйте паттерн с отдельным каналом ошибок или контекстом для graceful shutdown. Например:

GO
errCh := make(chan error, 1)
go func() {
result, err := doWork()
if err != nil {
errCh <- err
return
}
dataCh <- result
}()

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью