Ответ
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()
.