同時実行ベースの Go アプリケーションでは、goroutine の終了とエラー伝播の処理が課題となる場合があります。さまざまなアプローチが存在しますが、Error Group はエレガントで簡単なソリューションを提供します。
Error Group (errgroup) を使用すると、複数のゴルーチンとそのエラーをグループ化できます。グループ内のゴルーチンでエラーが発生すると、残りのゴルーチンが即座に中止され、呼び出し元にエラーが返されます。
エラー グループを使用してゴルーチンを終了し、エラーを処理する例を次に示します。
package main import ( "context" "fmt" "math/rand" "sync" "time" "golang.org/x/sync/errgroup" ) func fetchAll(ctx context.Context) error { var wg sync.WaitGroup errs := make(chan error) for i := 0; i < 4; i++ { wg.Add(1) go func(i int) { defer wg.Done() // Pretend this performs an HTTP request and returns an error. time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond) errs <- fmt.Errorf("error in goroutine %d", i) }(i) } go func() { wg.Wait() close(errs) }() // Return the first error (if any). for err := range errs { return err } return nil } func main() { fmt.Println(fetchAll(context.Background())) }
この例では、エラー グループを使用して、リソースの取得を担当するゴルーチンをラップします。いずれかのゴルーチンでエラーが発生した場合、エラー グループは残りのゴルーチンを直ちに終了し、最初のエラーを返します。
エラー グループのアプローチは、Go でゴルーチンの終了とエラー処理を処理するためのクリーンで簡潔な方法を提供します。これにより、ゴルーチンを手動で管理する必要がなくなり、エラーが呼び出し元に効率的に伝播されます。
以上がError Group は Go での Goroutine の終了とエラー処理をどのように効率化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。