| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | // Copyright 2016 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.// +build go1.7package contextimport (	"context" // standard library's context, as of Go 1.7	"time")var (	todo       = context.TODO()	background = context.Background())// Canceled is the error returned by Context.Err when the context is canceled.var Canceled = context.Canceled// DeadlineExceeded is the error returned by Context.Err when the context's// deadline passes.var DeadlineExceeded = context.DeadlineExceeded// WithCancel returns a copy of parent with a new Done channel. The returned// context's Done channel is closed when the returned cancel function is called// or when the parent context's Done channel is closed, whichever happens first.//// Canceling this context releases resources associated with it, so code should// call cancel as soon as the operations running in this Context complete.func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {	ctx, f := context.WithCancel(parent)	return ctx, CancelFunc(f)}// WithDeadline returns a copy of the parent context with the deadline adjusted// to be no later than d.  If the parent's deadline is already earlier than d,// WithDeadline(parent, d) is semantically equivalent to parent.  The returned// context's Done channel is closed when the deadline expires, when the returned// cancel function is called, or when the parent context's Done channel is// closed, whichever happens first.//// Canceling this context releases resources associated with it, so code should// call cancel as soon as the operations running in this Context complete.func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {	ctx, f := context.WithDeadline(parent, deadline)	return ctx, CancelFunc(f)}// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).//// Canceling this context releases resources associated with it, so code should// call cancel as soon as the operations running in this Context complete://// 	func slowOperationWithTimeout(ctx context.Context) (Result, error) {// 		ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)// 		defer cancel()  // releases resources if slowOperation completes before timeout elapses// 		return slowOperation(ctx)// 	}func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {	return WithDeadline(parent, time.Now().Add(timeout))}// WithValue returns a copy of parent in which the value associated with key is// val.//// Use context Values only for request-scoped data that transits processes and// APIs, not for passing optional parameters to functions.func WithValue(parent Context, key interface{}, val interface{}) Context {	return context.WithValue(parent, key, val)}
 |