# errorgroup **Repository Path**: longyunfeigu/errorgroup ## Basic Information - **Project Name**: errorgroup - **Description**: Package allows you to execute multiple goroutines, limiting the level of concurrency and providing a way to cancel all ongoing operations if any goroutine returns an error. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-12 - **Last Updated**: 2024-06-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # errorgroup 这个包提供了一个简单的方式来启动、管理和监控并发执行工作的goroutine组。 ## 功能: - 如果任何一个goroutine返回错误,自动取消所有的goroutine。 - 限制并发goroutine的数量。 - 等待所有goroutine完成。 - 获取首个出现的错误。 ## 如何使用: 首先,使用 `New` 函数创建一个新的组,该函数需要一个上下文(可以为 `nil`)以及限制最大并发数量的值。 ```go g := errorgroup.New(context.Background(), 5) ``` 使用 `Do` 方法启动一个新的goroutine。此方法接收一个 `Handler`,它是一个应该执行一些工作并在出错时返回错误的函数。如果传递给handler的上下文被取消,说明其他的handler中有一个已经返回了错误,因此这个handler也应该停止其操作。 ```go g.Do(func(ctx context.Context) error { // 在这里做一些工作.. }) ``` 等待所有goroutine完成,并获取第一个出现的错误(如果有)。 ```go if err := g.Wait(); err != nil { log.Fatal(err) } ``` 所有的goroutine将同时运行,直到达到设定的限制。如果其中任何一个返回错误,整个组将会被取消。 需要注意的是,`SetLimit` 函数允许你修改当前组中活跃goroutine的限制。但是,只有当组中没有活跃的goroutine时,才能进行此操作。 ## 重要说明 这个库并不保证goroutine任务的执行顺序或完成顺序。它的设计目标仅仅是简单地管理和监控可以并发运行的任务组。 ## 测试 我们为了测试目的,提供了覆盖大部分功能的单元测试。请查看 `*_test.go` 文件以获取更多详情。