Чистим main.go: предсказуемый старт и надежный Graceful Shutdown

Wait 5 sec.

Сталкивались ли вы с болью при управлении порядком запуска и остановки зависимостей в вашем Go-сервисе?Разработка больших сервисов неизбежно приводит к необходимости управлять множеством зависимостей. В этом контексте мы говорим о долгоживущих компонентах, чья работа обеспечивается отдельными горутинами: как правило, это блокирующий метод (например, Start), внутри которого крутится цикл обработки.Примерный сценарий жизненного цикла сервиса выглядит так:При запуске критически важно, чтобы пул соединений с БД, кэш и очереди были полностью готовы до того, как HTTP-сервер откроет порт и начнет принимать входящий трафик.С graceful shutdown ситуация обратная: порядок должен быть строго зеркальным. Сначала нужно перестать принимать новые запросы, дождаться завершения текущих, остановить воркеры, и только потом разрывать соединения с инфраструктурой. Иначе мы получаем неприятные ошибки подключения и даже потерянные транзакции в момент деплоя.Если эти проблемы вам не знакомы, смело закрывайте вкладку. Скорее всего, эта статья не принесет вам пользы.Но если вы ищете способ автоматизировать эту рутину, сохранив код чистым - добро пожаловать под кат. Читать далее