Что такое Graceful shutdown

«Что такое Graceful shutdown» — вопрос из категории Golang, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Graceful shutdown — это корректное завершение работы приложения, позволяющее завершить все текущие операции, освободить ресурсы и корректно закрыть соединения перед выходом. В Go реализуется через обработку сигналов (SIGINT, SIGTERM) и использование контекста.

Пример:

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    defer cancel()

    server := &http.Server{Addr: ":8080"}
    go func() {
        if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
            log.Fatal(err)
        }
    }()

    quit := make(chan os.Signal, 1)
    signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
    <-quit

    shutdownCtx, shutdownCancel := context.WithTimeout(ctx, 5*time.Second)
    defer shutdownCancel()

    if err := server.Shutdown(shutdownCtx); err != nil {
        log.Fatal("Forced shutdown:", err)
    }
}

Ключевые моменты:

  1. Ожидание сигналов завершения
  2. Завершение работы с таймаутом
  3. Освобождение ресурсов (БД, соединения и т.д.)