👁 В проде или 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



