Производные contexts

Пакет context предоставляет функции для получения новых значений Context из существующих. Эти значения образуют дерево: при отмене Context все его Contexts также отменяются.

Background - это корень любого дерева Context; он никогда не отменяется:

// Background возвращает пустой Context. Он никогда не отменяется, 
// не имеет времени окончания существования и не имеет значений. 
// Background обычно используется в main, init и tests, 
// а также в качестве Context верхнего уровня для входящих запросов.
func Background() Context

WithCancel и WithTimeout возвращают производные значения Context, которые могут быть отменены раньше родительского Context. Context, связанный с входящим запросом, обычно отменяется при возвращении обработчика запросов. WithCancel также полезен для отмены избыточных запросов при использовании нескольких реплик. WithTimeout полезен для установки времени окончания существования запросов на backend серверы:

// WithCancel возвращает копию родителя, чей канал закрылся, 
// как только parent.Done закрылся или был вызван метод cancel.
func WithCancel(parent Context) (ctx Context, cancel CancelFunc)

// CancelFunc отменяет Context.
type CancelFunc func()

// WithTimeout возвращает копию родителя, чей Done канал закрыт,
// как только parent.Done закрылся, был вызываан метод cancel, 
// или истекло время ожидания. Крайним сроком для нового Context 
// является now+timeout и deadline родителя, если таковой имеется. 
// Если таймер все еще работает, функция Cancel освобождает свои ресурсы.
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)

WithValue предоставляет способ связать значения области запроса с Context:

// WithValue возвращает копию родителя, чей метод Value возвращает значение val для key.
func WithValue(parent Context, key interface{}, val interface{}) Context

Лучший способоб узнать, как использовать пакет context, - посмотреть на рабочий пример.

results matching ""

    No results matching ""