Описание: Этот вопрос проверяет знание управления жизненным циклом горутин.
Goroutine leak — это «утечка» горутины, которая продолжает работать или висеть в ожидании. Избежать можно с помощью context, таймаутов и корректного закрытия каналов.
Определение: goroutine leak возникает, когда горутина не завершает работу и остаётся в памяти навсегда.
Причины:
ожидание по каналу, который никто не закрывает;
бесконечный цикл без условия выхода;
забыли отменить контекст.
Пример утечки:
func leak() {
ch := make(chan int)
go func() {
for v := range ch { // никогда не закроется
fmt.Println(v)
}
}()
}Как избегать:
использовать context.WithCancel или context.WithTimeout;
закрывать каналы, когда они больше не нужны;
следить за условиями выхода из циклов.
Вывод: контроль жизненного цикла горутин обязателен, иначе приложение может «съедать» память и ресурсы.