type Context interface {
Deadline() (deadline time.Time, ok bool)
Done() <-chan struct{}
Err() error
Value(key interface{}) interface{}
}
- Deadline,第一个出参 获取设置的截至时间点,第二个参数表示是否设置截至时间点
- Done,返回一个通道,如果这个通道可读,代表Context已经发起了取消,说白了这是一个信号传递,当从Done中能够读取出数据时,就该做一些工作了
- Err,返回Context取消的原因
- Value(key),返回Context的绑定的值,就是根据Key获取Value
Context 的调用应该是链式的,通过WithCancel
,WithDeadline
,WithTimeout
或WithValue
派生出新的 Context。当父 Context 被取消时,其派生的所有 Context 都将取消
func Background() Context
func TODO() Context
func WithCancel(parent Context) (ctx Context, cancel CancelFunc)
func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc)
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
func WithValue(parent Context, key, val interface{}) Context
使用场景:
- 全链路服务,日志追踪,记录
- 客户端,服务端方法调用超时控制
- 跨进程间延迟,取消信号,截至时间