Maison  >  Article  >  développement back-end  >  Comment le groupe d'erreurs peut-il rationaliser la terminaison de Goroutine et la gestion des erreurs dans Go ?

Comment le groupe d'erreurs peut-il rationaliser la terminaison de Goroutine et la gestion des erreurs dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-12 07:28:01702parcourir

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

Terminaison idiomatique de Goroutine et gestion des erreurs dans Go

Dans les applications Go basées sur la concurrence, la gestion de la terminaison de Goroutine et de la propagation des erreurs peut être un défi. Bien que diverses approches existent, Error Group offre une solution élégante et simple.

Error Group (errgroup) permet de regrouper plusieurs goroutines et leurs erreurs. Lorsqu'une goroutine du groupe rencontre une erreur, elle abandonne immédiatement les goroutines restantes, renvoyant l'erreur à l'appelant.

Voici un exemple d'utilisation du groupe d'erreurs pour mettre fin aux goroutines et gérer les erreurs :

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()))
}

Dans cet exemple, nous utilisons un groupe d'erreurs pour envelopper les goroutines responsables de la récupération des ressources. Si l'une des goroutines rencontre une erreur, le groupe d'erreurs met immédiatement fin aux goroutines restantes et renvoie la première erreur.

L'approche du groupe d'erreurs fournit une manière claire et concise de gérer la terminaison des goroutines et la gestion des erreurs dans Go. Il élimine le besoin de gérer manuellement les goroutines et garantit que les erreurs se propagent efficacement à l'appelant.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn