Gestion des erreurs et terminaison des Goroutines avec WaitGroup
Dans Go, les Goroutines assurent la concurrence et le parallélisme, tandis que les WaitGroups facilitent l'attente de la fin de plusieurs tâches simultanées. . Cependant, la gestion des erreurs au sein des goroutines, en particulier en conjonction avec WaitGroups, peut s'avérer difficile.
Pour gérer correctement les erreurs dans votre code basé sur les goroutines, envisagez d'utiliser le package golang.org/x/sync/errgroup. Ce package fournit un type de groupe qui simplifie la gestion des erreurs pour les goroutines.
Voici comment vous pouvez adapter votre exemple pour gérer les erreurs à l'aide de errgroup :
<code class="go">package main import ( "errors" "log" "golang.org/x/sync/errgroup" ) const totalGoroutines = 10 func main() { c := make(chan int, totalGoroutines) var g errgroup.Group // Add goroutines to the errgroup for i := 0; i < totalGoroutines; i++ { g.Go(func() error { return doSomething(c) }) } // Wait for all goroutines to complete and handle any errors if err := g.Wait(); err != nil { log.Fatal(err) } close(c) } func doSomething(c chan int) error { for i := 0; i < totalGoroutines; i++ { n, err := someFunctionThatCanError() if err != nil { return err } c <- n } return nil } func someFunctionThatCanError() (int, error) { return 1, errors.New("an error") }</code>
Dans ce code modifié :
Cette approche permet une gestion centralisée des erreurs et une terminaison gracieuse des goroutines. L'errgroup simplifie la gestion des erreurs et élimine le besoin de gestion manuelle des erreurs au sein du WaitGroup.
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!