「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.WithTimeout(ctx, time.Second)
8
9}
参考文档:
https://draveness.me/golang/docs/part3-runtime/ch06-concurrency/golang-context/