type Context

Context содержит deadline, сигнал отмены и другие значения через границы API.

Методы контекста могут вызываться одновременно несколькими горутинами.

type Context interface {
        // Deadline возвращает время, когда работа, выполненная от имени этого контекста, 
        // должна быть прервана. Deadline возвращает ok==false, если Deadline не установлен. 
        // Последовательные вызовы к Deadline возвращают одинаковые результаты.
        Deadline() (deadline time.Time, ok bool)

        // Done возвращает канал, закрывающийся, когда работа, 
        // выполненная от имени этого контекста, должна быть отменена. 
        // Если этот контекст не может быть отменен, можно вернуть nil. 
        // Последовательные вызовы Done возвращают одно и то же значение.
        //
        // WithCancel организует закрытие канала Done при вызове отмены;
        // WithDeadline организует закрытие канала Done по истечении deadline; 
        // WithTimeout организует закрытие канала Done, когда истечет тайм-аут.
        //
        // Done предоставляется для использования в инструкциях SELECT:
        //
        //  // Поток создает значения с помощью DoSomething и отправляет их до тех пор,  
        //  // пока DoSomething не вернет ошибку или ctx.Done не закроется.
        //  func Stream(ctx context.Context, out chan<- Value) error {
        //      for {
        //          v, err := DoSomething(ctx)
        //          if err != nil {
        //              return err
        //          }
        //          select {
        //          case <-ctx.Done():
        //              return ctx.Err()
        //          case out <- v:
        //          }
        //      }
        //  }
        //
        // См. Https://blog.golang.org/pipelines для получения дополнительных примеров того, 
        // как использовать канал Done для отмены.
        Done() <-chan struct{}

        // Если Done еще не закрыт, Err возвращает nil.
        // Если Done закрыт, Err возвращает non-nil ошибку, потому что:
        // Canceled, если контекст был отменен, либо 
        // DeadlineExceeded, если deadline был пройден.
        // После того, как Err вернет non-nil ошибку, 
        // последовательные вызовы Err будут возвращать ту же ошибку.
        Err() error

        // Value возвращает значение, связанное с текущим контекстом для ключа, 
        // или nil, если значение не связано с ключом.
        // Последовательные вызовы значения с одним и тем же ключом возвращает тот же результат.
        //
        // Используйте значения контекста только для данных с запросами, 
        // которые проходят через процессы и границы API, 
        // а не для передачи необязательных параметров для функций.
        //
        // Ключ идентифицирует конкретное значение в Context. 
        // Функции, которые хотят хранить значения в Context, 
        // обычно выделяют ключ в глобальной переменной, 
        // а затем используют этот ключ в качестве аргумента context.WithValue и Context.Value. 
        // Ключом может быть любой тип, поддерживающий равенство;
        // пакеты должны определять ключи как неэкспортируемые, чтобы избежать конфликтов.
        //
        // Пакеты, которые определяют Context key ключ, 
        // должны предоставлять безопасные типы доступа для значений, 
        // хранящихся с помощью этого ключа:
        //
        //     // Пакет user определяет тип User, который хранится в Contexts.
        //     package user
        //
        //     import "context"
        //
        //     // User - это тип значения, хранящийся в Contexts.
        //     type User struct {...}
        //
        //     // key — это неэкспортируемый тип ключей, определенных в этом пакете.
        //     // Это предотвращает конфликты с ключами, определенными в других упаковках.
        //     type key int
        //
        //     // userKey - это ключ для значений user.User в Contexts. Он неэкспортируемый;
        //     // клиенты используют user.NewContext и user.FromContext 
        //     // вместо прямого использования этого ключа.
        //     var userKey key = 0
        //
        //     // NewContext возвращает новый Context, который имеет значение u.
        //     func NewContext(ctx context.Context, u *User) context.Context {
        //         return context.WithValue(ctx, userKey, u)
        //     }
        //
        //     // FromContext возвращает значение User, сохраненное в ctx, если оно есть.
        //     func FromContext(ctx context.Context) (*User, bool) {
        //         u, ok := ctx.Value(userKey).(*User)
        //         return u, ok
        //     }
        Value(key interface{}) interface{}
}

results matching ""

    No results matching ""