Maison >développement back-end >Golang >Comment gérer les erreurs dans Go Goroutines avec WaitGroups ?

Comment gérer les erreurs dans Go Goroutines avec WaitGroups ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 01:27:30495parcourir

How to Handle Errors in Go Goroutines with WaitGroups?

Gestion des erreurs avec les WaitGroups dans Go

Les goroutines, les canaux et les WaitGroups sont des composants essentiels pour l'écriture de code simultané dans Go. Cependant, la gestion des erreurs dans ce contexte peut être difficile, en particulier lors de l'utilisation de WaitGroups.

Lors de l'utilisation de WaitGroups, il est important de réfléchir à la manière de gérer les erreurs qui se produisent dans les goroutines. Dans l'exemple fourni :

<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>

Si une erreur se produit lors de l'une des itérations de la boucle, il n'est pas clair comment la goroutine doit être terminée et le WaitGroup mis à jour.

Pour résoudre ce problème problème, il est recommandé d'utiliser le package golang.org/x/sync/errgroup. Voici une version modifiée de l'exemple utilisant 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>

Dans cet exemple, nous créons un errgroup.Group et passons une fonction à sa méthode Go. Si l'une des goroutines démarrées par errgroup.Group renvoie une erreur, la méthode errgroup.Wait renverra cette erreur, qui peut être gérée de manière appropriée.

L'utilisation d'errgroup fournit un moyen plus robuste et plus pratique de gérer les erreurs dans les goroutines. tout en conservant les avantages des WaitGroups.

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