Как описано в приведенной вами документации, ctx
должен быть ( очень ) общим аргументом для многих функций.Это похоже на то, как многие функции возвращают error
.Лучшее место для общего аргумента / возвращаемого значения - либо первое, либо последнее в списке.(Возможно, Go мог бы сделать так, чтобы error
всегда было первым возвращаемым значением - я не буду обсуждать это здесь).
Поскольку переменные переменные могут только будет последним в списке аргументов функции, поэтому единственный аргумент для общего аргумента будет первым.
Я думаю, именно поэтому ctx
всегда первый.
Этот шаблон часто встречается и с другими переменными в Go (и других языках).Каждый раз, когда общая переменная используется набором связанных функций, эта общая переменная часто стоит первой в списке аргументов (или, возможно, второй после ctx
).
Вопреки приведенному вами советуСуществуют библиотеки, которые хранят ctx
в структуре, а не передают ее в качестве первого аргумента.Обычно это (всегда?) Библиотеки, которые нужно было заново установить для использования ctx
, задолго до того, как контракт с библиотекой был заключен в камень (гарантией совместимости с Go 1.x).
Как правило, выследует следовать совету, чтобы передать ctx
в качестве первого аргумента для любой новой работы.