Проверяет понимание жизненного цикла контекста и умение строить корректные цепочки отмены.
context.Background() — это корневой контекст без отмены. Его нельзя передавать в бизнес-логику, потому что вы теряете таймауты, дедлайны и связь запроса с внешней системой. Правильно — принимать контекст сверху (HTTP/gRPC), передавать его вниз во все вызовы и использовать WithTimeout, где требуется более жёсткий контроль.
context.Background() является корневым пустым контекстом без таймаута, без дедлайна и без возможности отмены. Если передавать его в глубину системы, вы теряете главное преимущество контекста — управление временем и отменой работы, связанной с конкретным запросом.
Корректная цепочка контекстов такая:
входящий запрос → создаёт корневой контекст (HTTP/gRPC)
каждый слой бизнес-логики принимает ctx context.Context
при необходимости ограничить операцию — создают ctx, cancel := context.WithTimeout(ctx, ...)
Почему Background() — ошибка:
Нет отмены при разрыве соединения.
Клиент ушёл, а ваша горутина продолжает работать.
Нет дедлайна.
Любой вызов в БД может зависнуть навсегда.
Нарушение принципа “конвейера запросов”.
Все слои должны использовать один и тот же контекст запроса.
Проблемы с graceful shutdown.
Контекст запроса не завершится при остановке сервера.