goroutine、channel、context 与取消传播的关系

串起 Go 并发里的执行单元、通信原语和生命周期控制机制,建立任务启动、通信和停止的统一心智。

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

[!info] related notes

goroutine、channel、context 与取消传播的关系

范围

这篇笔记覆盖 Go 并发第一阶段最核心的三件事:

  • 谁在执行
  • 谁在通信
  • 谁在决定什么时候停

为什么要放在一起理解

单独学 goroutinechannelcontext 很容易变成 API 记忆题。但真实项目里它们通常同时出现:

  • goroutine 负责并发执行
  • channel 负责传递结果或协调时序
  • context 负责传递取消和超时

依赖路径 / 调用链 / 演进链

一条典型链路是:

  1. 主流程创建 context
  2. 主流程启动一个或多个 goroutine
  3. goroutine 通过 channel 回传结果或信号
  4. 一旦超时、上游取消或某个关键步骤失败,context 触发取消
  5. 各 goroutine 监听 ctx.Done() 后尽快退出

对比与易混淆点

  • goroutine 解决的是“并发执行”
  • channel 解决的是“怎么通信 / 怎么同步”
  • context 解决的是“什么时候该停”

它们各自不是彼此替代品。

一条实用经验

如果你的 goroutine 启动后没有:

  • 返回路径
  • 取消路径
  • 错误处理路径

那它大概率已经接近潜在泄漏。

创建于 2026/6/20 更新于 2026/6/20