Пакет Go Context

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

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

Context позволяет передавать сигналы отмены и дедлайны через ваш код. Он помогает ответить на три вопроса:

• Должна ли эта операция продолжать выполнение? • Когда эта операция должна завершиться? • Какие данные запроса передаются вместе с этим вызовом?

Интерфейс Context имеет четыре метода:

Context работает как дерево. Вы начинаете с родительского контекста и создаете дочерние.

Корневые контексты:

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

Важное правило: Всегда вызывайте функцию cancel. Используйте defer cancel() сразу после создания дочернего контекста. Если вы пропустите этот шаг, возникнут утечки памяти.

Лучшие практики:

Когда родительский контекст отменяется, все его дочерние контексты отменяются автоматически. Это позволяет легко остановить всю цепочку операций во всей вашей системе.

Источник: https://dev.to/ferztyle/go-context-package-37nk