2 minutes reading time
我们知道在 go 语言中很容易开启携程进行并发任务, 但是如何处理并发过程中的错误是非常棘手的,接下来我就来介绍 errgroup
的用法。
errgroup
包里主要是一个结构体和相应的方法,它可以让你在并发任务中处理错误。
type Group struct
func WithContext(ctx context.Context) (*Group, context.Context)
func ()
func () error
func (f func() error)
func (f func() error) bool
func (n int)
通过 WithContext 可以创建一个可以取消的 Group,当然除此之外也可以零值的 Group 也可以直接使用,但是出错之后就不会取消其他的 goroutine 了. Go方法 传入一个函数参数,会启动一个 goroutine 处理。
Wait 类似 WaitGroup 的 Wait 方法,等待所有的 goroutine 结束后退出,返回的错误是一个出错的 err。
TryGo 是和 SetLimit 配套的,只有当 group 中的 goroutines 数量小于配置的数量时,才会在 goroutine 中调用函数。 TryGo 用来判断 goroutine 是否启动。
接下来看一个官方使用 errgroup 的例子。
package main
import (
"fmt"
"log"
"net/http"
"golang.org/x/sync/errgroup"
)
func main()
这个例子很简单,就是当我们并发处理某个任务时,errgroup 会保存发生的第一个 error,当所有的 goroutine 都结束后,会返回这个 error。