Значения типа context.Context содержат учетные данные безопасности, информацию о трассировке, крайние сроки и сигналы отмены через API и границы процесса. Программы Go передают Контексты явно по всей цепочке вызовов функций от входящих RPC и HTTP-запросов до исходящих запросов.
Большинство функций, которые используют контекст, должны принять его как свой первый параметр:
func F (ctx context.Context, / * другие аргументы * /) {}
Функция, которая никогда не зависит от запроса, может использовать context.Background(), кроме ошибки при передаче Context, даже если вы считаете, что вам это не нужно. По умолчанию - передавайте Context; используйте context.Background() только в том случае, если у вас есть веская причина, по которой альтернатива является ошибкой.
Не добавляйте член Context в тип структуры; вместо этого добавьте параметр ctx к каждому методу того типа, который должен передать его. Единственное исключение - для методов, чья подпись должна соответствовать интерфейсу в стандартной библиотеке или в сторонней библиотеке.
Не создавайте пользовательские типы контекста и не используйте интерфейсы, отличные от контекста, в сигнатурах функций.
Если у вас есть данные приложения для передачи, поместите их в параметр, в получатель, в глобальные переменные или, если они действительно принадлежат, в значение Context.
Контексты являются неизменяемыми, поэтому можно передавать один и тот же ctx нескольким вызовам с одинаковым крайним сроком, сигналом отмены, учетными данными, родительской трассировкой и т.д.
Читайте также:
Комментариев нет:
Отправить комментарий