Элегантный graceful shutdown в Go с Ctrl+C

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

gograceful shutdownsignal.NotifyContext

👁 В проде или CLI-инструментах важно корректно обрабатывать завершение приложения — по Ctrl+C, kill, systemd и пр. Это нужно, чтобы успеть закрыть соединения, сохранить данные, завершить фоновые процессы.

📝 Вот рабочий шаблон на Go для graceful shutdown:

ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()

go func() {
  log.Println("App is running...")
  time.Sleep(30 * time.Second)
}()

<-ctx.Done()
log.Println("Shutting down gracefully...")

📌 Что происходит:

  • signal.NotifyContext создаёт контекст, который завершится при получении сигнала SIGINT или SIGTERM
  • <-ctx.Done() блокирует выполнение до сигнала
  • Можно использовать ctx в любом месте приложения (таймауты, отмена задач, HTTP-серверы)
  • Такой подход подходит и для микросервисов, и для утилит — аккуратное завершение с минимальным кодом

❗️ Подходит для разработки CLI-инструментов, микросервисов, работы с БД, фоновых процессов — везде, где нужен контроль над завершением. Простая и чистая альтернатива ручной обработке сигналов.

tags: #go #разработка

❤️ @recura_tech

Пример рабочего шаблона graceful shutdown в Go: код с signal.NotifyContext и заметной подсветкой синтаксиса
Скриншот: тёмная карточка с фрагментом кода на Go (signal.NotifyContext, <-ctx.Done(), time.Sleep), подсветкой синтаксиса и логотипом RECURA в углу.
Пример рабочего шаблона graceful shutdown в Go

Читайте так же