Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: server shutdown, waitgroup, resource cleanup

Как правильно подключить http.Server.Shutdown с воркерами и ресурсами?

Вопрос проверяет опыт работы с воркерами.

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

Создайте общий context.WithCancel, передайте его воркерам, а при сигнале: Shutdown(ctx) для HTTP, закройте входящие каналы, дождитесь WaitGroup, освободите ресурсы (БД/кэш), соблюдая таймаут.

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

Шаблон последовательности:

  1. ctx, cancel := context.WithCancel(root);

  2. Запускаем HTTP и воркеры (получают ctx);

  3. По сигналу:

  • server.Shutdown(timeoutCtx);

  • cancel() для фоновых задач;

  • wg.Wait() с разумным дедлайном;

  • закрыть коннекты к БД/кэшу.

var wg sync.WaitGroup

startWorker := func() {
    wg.Add(1)
    go func() {
        defer wg.Done()
        worker(ctx)
    }()
}

<-stop
shutdownCtx, c := context.WithTimeout(context.Background(), 10*time.Second)
defer c()

_ = srv.Shutdown(shutdownCtx)
cancel()
wg.Wait()
  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Golang

    Golang

  • Networks

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

#server shutdown

#waitgroup

#resource cleanup

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.