← 返回首页

Go语言的Context有什么作用?

在实际项目中,我们最常用的是超时控制。

比如一个HTTP请求需要调用多个下游服务,我们通过context.WithTimeout设置整体超时时间,当超时发生时,所有子操作都会收到取消信号并立即退出,避免资源浪费。

取消信号的传播是通过Context的层级结构实现的,父Context取消时,所有子Context都会自动取消。

另外Context还能传递请求级的元数据,比如用户ID、请求ID等,这在分布式链路追踪中特别有用。

需要注意的是,Context应该作为函数的第一个参数传递,不要存储在结构体中,并且传递的数据应该是请求级别的,不要滥用。