Context

30 阅读1分钟

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 之间退出通知元数据传递的功能。