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!