Why
很多框架中接口函数第一个参数统一是ctx context.Context接口,如net/http中conn.serve(ctx context.Context)方法,为什么要这么设计呢?
因为一般一个网络请求Request,会在多个Goroutine中处理,而这些Goroutine可能需要共享Request的一些信息;同时当Request被取消或者超时的时候,所有从这个Request创建的所有Goroutine也应该被结束。上下文则几乎已经成为传递与请求同生存周期变量的标准方法。
What
context用于Goroutine之间共享状态变量,另一个gorutine通过设置ctx变量值,传递过期或撤销信号给被调用的程序单元。


type Context interface {
Deadline() (deadline time.Time, ok bool)
Done() <-chan struct{}
Err() error
Value(key interface{}) interface{}
}

Go语言中的Context用于Goroutine间共享状态变量和传递控制信号。当网络请求处理时,多个Goroutine可能需要共享Request信息,并在Request取消或超时时结束相关Goroutine。Context提供了Deadline、Done、Err和Value方法,允许安全地共享数据并控制Goroutine的生命周期。创建Context树时,一般从context.Background开始,通过传递Context实现上层对下层Goroutine的控制。在使用Context时,应遵循避免作为字段、不传nil、仅用于请求数据和监控Done通道等原则。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



