type Context interface {
Deadline() (deadline time.Time, ok bool)
Done() <-chan struct{}
Err() error
Value(key interface{}) interface{}
}
context
包的核心就是Context
接口,含义如下:
-
Deadline
会返回一个超时时间,Goroutine获得了超时时间后,例如可以对某些IO操作设定超时时间。 -
Done
方法返回一个信道(channel),当Context
被撤销或过期时,该信道是关闭的,即它是一个表示Context是否已关闭的信号。 -
当
Done
信道关闭后,Err
方法表明Contex
t被撤的原因。 -
Value
可以让Goroutine共享一些数据,当然获得数据是协程安全的。但使用这些数据的时候要注意同步,比如返回了一个map,而这个map的读写则要加锁。