「Go」context
context.Context用来设置截止日期、同步信号,传递请求相关值的结构体。上下文与Goroutine有非常密切的关系。
1type Context interface{ 2 Deadline()(deadline time.Time, ok bool) 3 Done() <-chan struct{} 4 Err() error 5 Value(key interface{}) interface{} 6} context.Context有四个方法:
Deadline() 返回context.Context被取消时间,也就是完成工作的截止日期;
Done() 返回一个channel,这个channel 会在当前工作完成或者上下文被取消后关闭,多次调用Done方法返回的是同一个channel;
Err() 返回context.Context 结束的原因,它只会在Done返回的Channel被关闭时才会返回非空的值
如果 context.Context 被取消,会返回Canceled错误;
如果 context.Context 超时,会返回DeadlineExceeded错误;
Value 从context.Context 中获取键对应的值。对同一个上下文来说,多次调用value并传入相同的key会返回相同的结果,该方法用来传递请求特定的数据。
1func main() { 2 ctx := context.Background() // new empty context 3 4 ctx = context.WithValue(ctx, "org", "ali") 5 ctx, _ = context.WithCancel(ctx) 6 ctx, _ = context.WithDeadline(ctx, time.Now().Add(10*time.Second)) 7 ctx, _ = context.