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!