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
Libérer: 2024-11-14 13:44:02
original
924 Les gens l'ont consulté

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{})
  //...
}
Copier après la connexion

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

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!

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