Go errgroup:高效并发控制与错误处理
一、什么是errgroup?
errgroup 是 Go 语言官方扩展库 golang.org/x/sync 提供的并发控制工具。它在标准库 sync.WaitGroup 的基础上进行了功能扩展,增加了错误处理、上下文取消和并发限制等特性,特别适合需要协调多个 goroutine 并处理错误的使用场景。
errgroup 核心特性如下:
1)错误传播:自动捕获首个非空错误,并通过 Wait() 方法直接返回,省去手动收集错误状态的繁琐操作。
2)上下文感知:深度集成 context.Context,任一协程失败时自动触发上下文取消,及时终止其他任务以节省资源。
3)并发控制:通过 SetLimit() 方法灵活设置并发协程数上限,有效防止系统资源过载。
4)代码精简:显著减少手动同步和错误处理的模板代码,使代码更加简洁易维护。
二、errgroup基础用法
当启动两个并发任务时,使用Go()方法创建goroutine执行任务。若其中任一任务返回错误,调用Wait()方法会阻塞直至所有任务完成,并返回最先出现的错误,代码示例如下:
func main() {var group errgroup.Groupgroup.Go(func() error {fmt.Println("执行成功")return nil})group.Go(func() error {return errors.New("返回错误")})if err := group.Wait(); err != nil {fmt.Println("错误:", err)}
}
执行结果如下: