Почему горутина не завершается?

Middle
235 просмотров
AFK Offer AI

Частая причина — горутина заблокирована на канале, который никто не читает/пишет. Или ждёт mutex, который кто-то забыл разблокировать. Или бесконечный цикл без проверки context.Done(). Пример: ch := make(chan int); go func() { ch <- 1 }() — если main не читает из ch, горутина висит вечно (goroutine leak). Фикс: всегда думай, кто закроет канал и кто прочитает. select с ctx.Done() для graceful exit. runtime.NumGoroutine() для мониторинга утечек. goleak в тестах.

Следующий вопрос

Что такое internal пакет в Go?