Возможно, стоит прочитать context.Context
, в частности эту статью , в которой есть раздел, который гласит:
В Google мы требуем, чтобы программисты Go передавали параметр Contextв качестве первого аргумента каждой функции на пути вызова между входящими и исходящими запросами.
TL; DR - нормально передавать контекст, но как лучше?
Есть два основных шаблона
- Попросить контекст датьвы логгер
- Дайте логгеру контекст
Контекст может использоваться для хранения значений:
context.WithValue(ctx, someKey, someValue)
Это означает, что мы можем сделать:
somepackage.Log(ctx).Info("hello world")
// or
sompackage.Info(ctx, "hello world")
Реализация этих двух примеров API может взаимодействовать с контекстом для получения необходимых значений без необходимости беспокоиться о дополнительной информации, которая была бы в MDC на любом из сайтов вызовов журналирования.