Go context

context 用来在调用链和 goroutine 之间传递取消信号、超时和请求范围元数据,是 Go 并发生命周期管理的核心工具。

#type / concept #status / growing #tech / dev #resource / go

[!info] related notes

Go context

一句话定义

context 是 Go 用来在调用链和并发任务之间传递取消、超时和请求范围信号的标准机制。

核心机制 / 工作原理

context 解决的不是“如何传业务参数”,而是“这条工作链还应不应该继续执行”。

它常见承载的信息包括:

  • 取消信号
  • 截止时间 / 超时
  • 请求范围元数据

这让它特别适合:

  • HTTP 请求链路
  • 数据库查询超时
  • 多 goroutine 协作任务的统一退出

最小例子 / 最小场景

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

这里的关键点是:

  • cancel 需要显式调用释放资源
  • 下游逻辑应该监听 ctx.Done()

为什么它是并发主线的一部分

只会启动 goroutine 不够,真正的工程问题在于:

  • 谁来叫停
  • 什么时候超时
  • 上游取消后下游怎么退出

context 正是用来把这条控制链标准化。

边界与易混淆点

  • context 不是通用参数包,不要把业务字段都塞进去
  • context 不能替代所有数据通信,它主要解决生命周期控制
  • 忘记调用 cancel 会造成资源滞留
创建于 2026/6/20 更新于 2026/6/20