Maison >développement back-end >Golang >Comment puis-je terminer gracieusement les Goroutines et gérer les erreurs dans Go ?

Comment puis-je terminer gracieusement les Goroutines et gérer les erreurs dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-14 13:44:02897parcourir

How Can I Gracefully Terminate Goroutines and Handle Errors in Go?

Terminaison idiomatique des goroutines et gestion des erreurs

Dans le domaine de la concurrence Go, la gestion transparente de la terminaison des goroutines et des erreurs est cruciale. Prenons un cas d'utilisation simple dans lequel nous visons à récupérer des données de plusieurs serveurs distants simultanément, en renvoyant la première erreur rencontrée.

Fuite de goroutines

Une première tentative peut impliquer une fuite de goroutines, comme souligné dans ce qui suit extrait de code :

func fetchAll() error {
  wg := sync.WaitGroup{}
  errs := make(chan error)
  leaks := make(map[int]struct{})
  //...
}

Pour résoudre ce problème, nous pouvons soit utiliser le contexte, soit utiliser le package errgroup :

Solution de groupe d'erreurs

Le package errgroup offre un moyen pratique pour gérer les terminaisons et les erreurs des goroutines. Il attend automatiquement la fin de toutes les goroutines fournies ou annule celles restantes en cas d'erreur.

func fetchAll(ctx context.Context) error {
  errs, ctx := errgroup.WithContext(ctx)
  //...
  return errs.Wait()
}

Ce code gère élégamment la terminaison des goroutines et renvoie la première erreur rencontrée.

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