WaitGroup を使用した Goroutine のエラー処理と終了
Go では、Goroutine は同時実行性と並列処理を提供し、WaitGroups は複数の同時タスクが完了するまでの待機を容易にします。 。ただし、ゴルーチン内でエラーを処理することは、特に WaitGroups と組み合わせて行う場合、難しい場合があります。
ゴルーチン ベースのコードでエラーを適切に処理するには、golang.org/x/sync/errgroup パッケージの利用を検討してください。このパッケージは、ゴルーチンのエラー処理を簡素化するグループ タイプを提供します。
errgroup を使用してエラーを処理するように例を調整する方法は次のとおりです。
<code class="go">package main import ( "errors" "log" "golang.org/x/sync/errgroup" ) const totalGoroutines = 10 func main() { c := make(chan int, totalGoroutines) var g errgroup.Group // Add goroutines to the errgroup for i := 0; i < totalGoroutines; i++ { g.Go(func() error { return doSomething(c) }) } // Wait for all goroutines to complete and handle any errors if err := g.Wait(); err != nil { log.Fatal(err) } close(c) } func doSomething(c chan int) error { for i := 0; i < totalGoroutines; i++ { n, err := someFunctionThatCanError() if err != nil { return err } c <- n } return nil } func someFunctionThatCanError() (int, error) { return 1, errors.New("an error") }</code>
この変更されたコードでは、
このアプローチにより、集中的なエラー処理と goroutine の正常な終了が可能になります。 errgroup によりエラー管理が簡素化され、WaitGroup 内で手動でエラーを処理する必要がなくなります。
以上がGo で WaitGroups を使用してすべてのタスクが完了するのを待機しているときに、ゴルーチンのエラーを効果的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。