Go 同時実行の領域では、ゴルーチンの終了とエラーをシームレスに処理することが重要です。複数のリモート サーバーからデータを同時に取得し、最初に発生したエラーを返すという単純な使用例を考えてみましょう。
最初の試行には、次で強調表示されているように、ゴルーチンのリークが含まれる場合があります。コード スニペット:
func fetchAll() error { wg := sync.WaitGroup{} errs := make(chan error) leaks := make(map[int]struct{}) //... }
この問題に対処するには、コンテキストを使用するか、errgroup を利用します。パッケージ:
errgroup パッケージは、Goroutine の終了とエラーを管理する便利な方法を提供します。提供されたすべての goroutine の完了を自動的に待機するか、エラーが発生した場合は残りの goroutine をキャンセルします。
func fetchAll(ctx context.Context) error { errs, ctx := errgroup.WithContext(ctx) //... return errs.Wait() }
このコードは goroutine の終了を適切に処理し、最初に発生したエラーを返します。
以上がGo でゴルーチンを正常に終了し、エラーを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。