Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: cancellation, context, deadline, timeout

Почему нельзя передавать context.Background() глубоко внутрь бизнес-логики и как правильно работать с контекстами?

Проверяет понимание жизненного цикла контекста и умение строить корректные цепочки отмены.

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

context.Background() — это корневой контекст без отмены. Его нельзя передавать в бизнес-логику, потому что вы теряете таймауты, дедлайны и связь запроса с внешней системой. Правильно — принимать контекст сверху (HTTP/gRPC), передавать его вниз во все вызовы и использовать WithTimeout, где требуется более жёсткий контроль.

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

context.Background() является корневым пустым контекстом без таймаута, без дедлайна и без возможности отмены. Если передавать его в глубину системы, вы теряете главное преимущество контекста — управление временем и отменой работы, связанной с конкретным запросом.

Корректная цепочка контекстов такая:

  • входящий запрос → создаёт корневой контекст (HTTP/gRPC)

  • каждый слой бизнес-логики принимает ctx context.Context

  • при необходимости ограничить операцию — создают ctx, cancel := context.WithTimeout(ctx, ...)

Почему Background() — ошибка:

  1. Нет отмены при разрыве соединения.

    Клиент ушёл, а ваша горутина продолжает работать.

  2. Нет дедлайна.

    Любой вызов в БД может зависнуть навсегда.

  3. Нарушение принципа “конвейера запросов”.

    Все слои должны использовать один и тот же контекст запроса.

  4. Проблемы с graceful shutdown.

    Контекст запроса не завершится при остановке сервера.

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Golang

    Golang

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

#cancellation

#context

#deadline

#timeout

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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