Go在1.7标准库中引入context,用于管理goroutine
Context接口
type Context interface{
Deadline()(deadline time.Time, ok bool)
Done() <-chan struct{}
Err() error
Value(key any) any
}
context的作用
在Go 里,我们不能直接杀死协程,协程的关闭一般会用 channel+select 方式来控制。但是在某些场景下,例如处理一个请求衍生了很多协程,这些协程之间是相互关联的:需要共享一些全局变量、有共同的 deadline 等,而且可以同时被关闭。再用 channel+select 就会比较麻烦,这时就可以通过 context 来实现。context 用来解决 goroutine 之间退出通知、元数据传递的功能。