> Когда обычно закрывают горутины, работающие в бесконечных циклах в Go (Go)

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

Компании: ЦУМ

Стек: Go

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

Горутины с бесконечными циклами (например, for { select { ... } }) закрывают через контекст (context.Context) или отдельный канал завершения. Самый распространённый паттерн - передача контекста с таймаутом или возможностью отмены:

GO
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // завершаем горутину
default:
// полезная работа
}
}
}

Также используют отдельный канал stop:

GO
func worker(stop <-chan struct{}) {
for {
select {
case <-stop:
return
default:
// работа
}
}
}

Закрытие происходит при отмене контекста (через cancel(), таймаут или deadline) или при закрытии канала stop. Это гарантирует корректное освобождение ресурсов и избегает утечек горутин.

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

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