go17.go (2850B)
1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build go1.7 6 // +build go1.7 7 8 package context 9 10 import ( 11 "context" // standard library's context, as of Go 1.7 12 "time" 13 ) 14 15 var ( 16 todo = context.TODO() 17 background = context.Background() 18 ) 19 20 // Canceled is the error returned by Context.Err when the context is canceled. 21 var Canceled = context.Canceled 22 23 // DeadlineExceeded is the error returned by Context.Err when the context's 24 // deadline passes. 25 var DeadlineExceeded = context.DeadlineExceeded 26 27 // WithCancel returns a copy of parent with a new Done channel. The returned 28 // context's Done channel is closed when the returned cancel function is called 29 // or when the parent context's Done channel is closed, whichever happens first. 30 // 31 // Canceling this context releases resources associated with it, so code should 32 // call cancel as soon as the operations running in this Context complete. 33 func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { 34 ctx, f := context.WithCancel(parent) 35 return ctx, f 36 } 37 38 // WithDeadline returns a copy of the parent context with the deadline adjusted 39 // to be no later than d. If the parent's deadline is already earlier than d, 40 // WithDeadline(parent, d) is semantically equivalent to parent. The returned 41 // context's Done channel is closed when the deadline expires, when the returned 42 // cancel function is called, or when the parent context's Done channel is 43 // closed, whichever happens first. 44 // 45 // Canceling this context releases resources associated with it, so code should 46 // call cancel as soon as the operations running in this Context complete. 47 func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { 48 ctx, f := context.WithDeadline(parent, deadline) 49 return ctx, f 50 } 51 52 // WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)). 53 // 54 // Canceling this context releases resources associated with it, so code should 55 // call cancel as soon as the operations running in this Context complete: 56 // 57 // func slowOperationWithTimeout(ctx context.Context) (Result, error) { 58 // ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) 59 // defer cancel() // releases resources if slowOperation completes before timeout elapses 60 // return slowOperation(ctx) 61 // } 62 func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { 63 return WithDeadline(parent, time.Now().Add(timeout)) 64 } 65 66 // WithValue returns a copy of parent in which the value associated with key is 67 // val. 68 // 69 // Use context Values only for request-scoped data that transits processes and 70 // APIs, not for passing optional parameters to functions. 71 func WithValue(parent Context, key interface{}, val interface{}) Context { 72 return context.WithValue(parent, key, val) 73 }