Как использовать контекст для graceful shutdown?

Ответ

Создать контекст с отменой. При получении SIGTERM/SIGINT вызвать cancel(). Сервер и воркеры принимают этот контекст и в select проверяют ctx.Done(); при отмене останавливают приём новых задач и завершают работу. Дожидаться выхода через WaitGroup или errgroup.

ctx, cancel := context.WithCancel(context.Background())
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGTERM)
go func() { <-sigCh; cancel() }()
srv.Run(ctx)
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.