Context — это фундаментальный пакет Go, который управляет дедлайнами, сигналами отмены и значениями, привязанными к запросу, через горутины и границы API. Он позволяет осуществлять корректное завершение работы и управление таймаутами в конкурентных приложениях.
Объекты Context создаются иерархически, начиная с корневого контекста:
context.Background() — базовый контекст для главной горутиныcontext.TODO() — используется, когда подходящий контекст неизвестенGo предоставляет несколько конструкторов контекста для разных сценариев:
WithCancel() — возвращает отменяемый контекстWithTimeout() — автоматически отменяется через указанный промежуток времениWithDeadline() — отменяется в определённый момент времениWithValue() — прикрепляет данные, привязанные к запросуctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
Этот паттерн:
cancel для ручного завершения, если нужноdefer cancel(), чтобы гарантировать очистку ресурсов и избежать утечекcancel() через defer, чтобы освободить ресурсыctx.Done(), чтобы отловить отмену в долгоживущих операцияхContext критически важен для:
Выражение defer cancel() не обязательно при использовании context.WithTimeout(), потому что контекст автоматически освободит ресурсы после истечения timeout.
Новый — ещё не проверен сообществом
Вы