🟡 Средний · 2 очк. Горутины и конкурентность
Какая самая частая причина утечки горутин (goroutine leak)?
A Слишком много горутин
B Горутина навсегда заблокирована на канале без читателя/писателя
C Отсутствие defer
D Большие структуры в горутине
Объяснение вопроса

Самая частая причина - горутина навсегда блокируется на операции с каналом: ждёт чтения или записи в канал, который никогда не станет готов (никто не пишет/не закроет канал, или все ждут друг друга). Утечка горутины ведёт к утечке памяти (стек, захваченные переменные).

ch := make(chan int)
go func() {
    <-ch  // навсегда ждёт - никто не пишет
}()  // утечка

Решения

  • Использовать context с отменой и проверять ctx.Done() в select
  • Таймауты: time.After в select или context.WithTimeout
  • Закрывать каналы при завершении работы (обычно закрывает отправитель)

Диагностика: runtime.NumGoroutine(), профиль горутин go tool pprof http://.../debug/pprof/goroutine.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.