Maison > développement back-end > Golang > le corps du texte

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

Linda Hamilton
Libérer: 2024-10-27 01:27:30
original
413 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!