суббота, 23 февраля 2019 г.

Go Code Review Comments: контексты

Значения типа context.Context содержат учетные данные безопасности, информацию о трассировке, крайние сроки и сигналы отмены через API и границы процесса. Программы Go передают Контексты явно по всей цепочке вызовов функций от входящих RPC и HTTP-запросов до исходящих запросов.

Большинство функций, которые используют контекст, должны принять его как свой первый параметр:

func F (ctx context.Context, / * другие аргументы * /) {}

Функция, которая никогда не зависит от запроса, может использовать context.Background(), кроме ошибки при передаче Context, даже если вы считаете, что вам это не нужно. По умолчанию - передавайте Context; используйте context.Background() только в том случае, если у вас есть веская причина, по которой альтернатива является ошибкой.

Не добавляйте член Context в тип структуры; вместо этого добавьте параметр ctx к каждому методу того типа, который должен передать его. Единственное исключение - для методов, чья подпись должна соответствовать интерфейсу в стандартной библиотеке или в сторонней библиотеке.

Не создавайте пользовательские типы контекста и не используйте интерфейсы, отличные от контекста, в сигнатурах функций.

Если у вас есть данные приложения для передачи, поместите их в параметр, в получатель, в глобальные переменные или, если они действительно принадлежат, в значение Context.

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


Читайте также:


Комментариев нет:

Отправить комментарий