ホームページ >バックエンド開発 >Golang >Error Group は Go での Goroutine の終了とエラー処理をどのように効率化できますか?

Error Group は Go での Goroutine の終了とエラー処理をどのように効率化できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-12 07:28:01780ブラウズ

How Can Error Group Streamline Goroutine Termination and Error Handling in Go?

Go における慣用的な goroutine の終了とエラー処理

同時実行ベースの 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。