Пакет Go Context

Більшість Go-розробників використовують context.Context, не розуміючи, як він працює. Ви бачите його в HTTP-обробниках, викликах баз даних та методах SDK. Багато новачків всюди передають context.Background().

Ця помилка спричиняє проблеми. Lambda-функція може зависнути після завершення свого таймауту. Запит до бази даних може продовжувати виконуватися після того, як користувач відключився.

Context дозволяє надсилати сигнали скасування та дедлайни (deadlines) через ваш код. Він допомагає відповісти на три запитання:

• Чи має ця операція продовжувати виконання? • Коли ця операція має завершитися? • Які дані запиту передаються разом із цим викликом?

Інтерфейс Context має чотири методи:

Context працює як дерево. Ви починаєте з батьківського контексту та створюєте дочірні.

Кореневі контексти:

Дочірні контексти:

Важливе правило: Завжди викликайте функцію cancel. Використовуйте defer cancel() одразу після створення дочірнього контексту. Якщо ви пропустите це, ви створите витоки пам'яті.

Найкращі практики:

Коли батьківський контекст скасовується, усі його дочірні контексти скасовуються автоматично. Це дозволяє легко зупинити весь ланцюжок операцій у всій системі.

Джерело: https://dev.to/ferztyle/go-context-package-37nk