Golang errgroup怎么用_Golang errgroup并发教程【最新】

张开发
2026/4/15 8:08:40 15 分钟阅读

分享文章

Golang errgroup怎么用_Golang errgroup并发教程【最新】
errgroup.WithContext是唯一安全初始化方式必须传入带超时的contextGoContext()用于可取消IO操作Go()仅适用于纯CPU计算Wait()只返回首个错误且不捕获panic。errgroup.WithContext 是唯一安全的初始化方式直接 new(errgroup.Group) 或 errgroup.Group{} 会丢失上下文控制能力——超时、取消全部失效任务失败后可能永久卡住。必须用 errgroup.WithContext 初始化并传入带超时的 context。错误写法var g errgroup.Group → 后续调用 g.Wait() 无法响应超时ctx.Err() 永远为 nil正确写法g, ctx : errgroup.WithContext(context.WithTimeout(context.Background(), 5*time.Second))超时时间要覆盖整个任务链比如 HTTP 请求 JSON 解析 写文件不能只包某一步第三方库如 http.Client必须显式使用 WithContext 方法否则 errgroup 的超时会被绕过Go() 和 GoContext() 到底该选哪个Go() 只接受无参函数完全不感知 contextGoContext() 显式接收 ctx 参数并在内部自动监听 ctx.Done()适合所有可取消的 IO 操作。HTTP 请求、数据库查询、文件读写 → 必须用 GoContext()否则 context 取消后 goroutine 继续跑资源泄漏、错误被掩盖纯 CPU 计算如 base64 编码、简单数学运算→ 可用 Go()但得确保它真的不阻塞、不依赖外部状态混用风险高一个用 Go()另一个用 GoContext()前者可能还在跑后者已退出Wait() 返回后你根本不知道它是否完成示例g.GoContext(func(ctx context.Context) error { return http.GetWithContext(ctx, url) })Wait() 返回 nil 不代表全成功errgroup.Wait() 返回 nil只表示「所有已启动的任务都完成了且没报告非 nil 错误」——但它不检查 panic也不保证每个 goroutine 都真正执行完毕。 Zeemo AI 一款专业的视频字幕制作和视频处理工具

更多文章