【go】context上下文

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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{}

}
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值