Go の WaitGroups によるエラー処理
Goroutine、チャネル、および WaitGroups は、Go で同時実行コードを記述するために不可欠なコンポーネントです。ただし、このコンテキストでのエラーの処理は、特に WaitGroups を使用する場合に困難になる可能性があります。
WaitGroups を使用する場合は、ゴルーチン内で発生するエラーの処理方法を考慮することが重要です。提供されている例では:
<code class="go">func doSomething(c chan int) { for i := 0; i < 10; i++ { n, err := someFunctionThatCanError() if err != nil { // How do I end the routines and WaitGroups here? } c <- n waitGroup.Done() }</code>
ループのいずれかの反復中にエラーが発生した場合、ゴルーチンをどのように終了し、WaitGroup を更新するかは不明です。
これに対処するには問題がある場合は、 golang.org/x/sync/errgroup パッケージを使用することをお勧めします。 errgroup を使用した例の修正バージョンを次に示します。
<code class="go">import ( "log" "sync" "golang.org/x/sync/errgroup" ) func main() { c := make(chan int, 10) var g errgroup.Group g.Go(func() error { return doSomething(c) }) // g.Wait waits for all goroutines to complete // and returns the first non-nil error returned // by one of the goroutines. if err := g.Wait(); err != nil { log.Fatal(err) } } func doSomething(c chan int) error { defer close(c) for i := 0; i < 10; i++ { n, err := someFunctionThatCanError() if err != nil { return err } c <- n } return nil }</code>
この例では、errgroup.Group を作成し、関数をその Go メソッドに渡します。 errgroup.Group によって開始されたゴルーチンのいずれかがエラーを返した場合、errgroup.Wait メソッドはそのエラーを返し、適切に処理できます。
errgroup を使用すると、ゴルーチンのエラーを処理するためのより堅牢で便利な方法が提供されます。 WaitGroups の利点を維持しながら。
以上がWaitGroups を使用して Go ゴルーチンのエラーを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。