Пакет context

import "context"

Обзор

Пакет context определяет тип Context, который содержит deadlines, сигналы отмены и другие значения области запроса в границах API и между процессами.

Входящие на сервер запросы должны создавать Context, а исходящие вызовы должны принимать Context. Цепочка вызовов функций между ними должна распространять Context, при необходимости заменить его производными Context, созданными с помощью WithCancel, WithDeadline, WithTimeout, или WithValue. При отмене Context все вытекающие из него Contexts также отменяются.

Функции WithCancel, WithDeadline и WithTimeout принимают Context (родительский) и возвращают производный Context (дочерний элемент) и CancelFunc. Вызов CancelFunc отменяет дочерний элемент и его дочерние элементы, удаляет ссылку родителя для дочернего элемента и останавливает любые связанные таймеры. При неудачном вызове CancelFunc происходит утечка дочернего элемента и его дочерних, пока родительский элемент не будет отменен или не сработает таймер. Инструмент go vet проверяет, что CancelFuncs используются на всех путях управления потоком.

Программы, использующие Context, должны следовать этим правилам, чтобы обеспечить согласованность интерфейсов между пакетами и включить средства статического анализа для проверки распространения контекста.

Не храните Context внутри типа struct; Вместо этого необходимо явным образом передать Context каждой функции, которая нуждается в нем. Context должен быть первым параметром, обычно именуемым ctx:

func DoSomething(ctx context.Context, arg Arg) error {
    // ... Использование ctx ...
}

Не пропускайте Context с знчением nil, даже если функция разрешает его. Передайте context.TODO, если вы не уверены в том, какой Context использовать. Используйте значения контекста только для данных с запросом, которые проходят через процессы и API, а не для передачи необязательных параметров для функций. Тот же Context может быть передан функциям, выполняющимся в разных goroutines; Контексты безопасны для одновременного использования несколькими goroutines.

Вы можете ознакомиться с примером программы использующей Context здесь.

results matching ""

    No results matching ""