Go context
context 用来在调用链和 goroutine 之间传递取消信号、超时和请求范围元数据,是 Go 并发生命周期管理的核心工具。
#type / concept
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go 并发 MOC
- 前置概念: Go goroutine, Go channel
- 关系笔记: goroutine、channel、context 与取消传播的关系
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会造成资源滞留