Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Golang: golang, gracefulshutdown, context, http

Как в Go реализовать graceful shutdown для сервиса, у которого есть HTTP-сервер и фоновые воркеры?

Проверяет умение закрывать сервис корректно, без потери запросов.

Короткий ответ

Используют context и системные сигналы (os.Signal). При SIGTERM вызывается server.Shutdown(ctx), а воркерам передаётся отменённый контекст, чтобы завершить работу.

Длинный ответ

Graceful shutdown = «корректное завершение»:

  • Не принимать новые запросы.

  • Дождаться завершения текущих.

  • Закрыть фоновые воркеры.

Пример:

srv := &http.Server{Addr: ":8080", Handler: mux}

go srv.ListenAndServe()

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

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
srv.Shutdown(ctx) // ждём завершения запросов

Для воркеров — передавать ctx и проверять <-ctx.Done().

Вывод: Graceful shutdown обязателен для production-сервисов, чтобы избежать обрезанных запросов и утечек.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Golang

    Golang

Ключевые слова

#golang

#gracefulshutdown

#context

#http

Подпишись на Golang Developer в телеграм