Как сделать graceful shutdown горутин?

Ответ

Передать контекст с отменой или канал done. При получении сигнала (SIGTERM) вызвать cancel() или закрыть done. Горутины проверяют ctx.Done() или <-done и выходят. Дождаться завершения через WaitGroup или errgroup.

ctx, cancel := context.WithCancel(context.Background())
go func() { <-sig; cancel() }()
g, ctx := errgroup.WithContext(ctx)
g.Go(func() error { return runServer(ctx) })
g.Wait()
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.