Что такое `context.Background()` и когда его следует использовать?

Ответ

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

Он является корнем иерархии контекстов в приложении. Он не несет никаких значений, не имеет дедлайна и не может быть отменен.

// ctx - это пустой контекст, который никогда не будет отменен.
ctx := context.Background()

Когда использовать context.Background():

  • Инициализация: В функции main() или в функциях инициализации, где создается самый первый, корневой контекст для всего приложения.
  • Верхний уровень запроса: На самом верху обработки входящего запроса (например, в HTTP-обработчике), когда нужно создать базовый контекст для этой конкретной операции, который затем будет обогащаться значениями или дедлайнами.
  • Тесты: В тестах, когда тестируемой функции требуется context, но для самого теста не нужна отмена или таймаут.

Разница с context.TODO():

  • context.Background(): Используется, когда вы уверены, что вам не нужен конкретный контекст (например, на старте приложения).
  • context.TODO(): Используется как заглушка (placeholder), когда вы не уверены, какой контекст использовать, или планируете добавить его позже в процессе рефакторинга. Его использование сигнализирует, что код требует доработки.

Важное правило: Никогда не передавайте nil в качестве context.Context. Если подходящего контекста нет, используйте context.Background() или context.TODO().