Les goroutines, threads légers dans Go, améliorent la concurrence et l'asynchronie. Cependant, la panique provoquée par une routine peut perturber la stabilité du programme. Cet article explore la récupération après une panique dans les goroutines pour envoyer des rapports d'erreurs à des services de rapport d'erreur comme Sentry ou Raygun.
Problème :
Comment les paniques des goroutines enfants peuvent-elles être capturées dans la routine principale pour faciliter les erreurs rapport ?
Réponse :
Les goroutines ne peuvent pas se remettre des paniques dans d'autres goroutines. La solution idiomatique consiste à injecter des appels recovery() dans les goroutines enfants à l'aide de fonctions différées.
Moyens idiomatiques de récupérer les paniques :
Exemple d'utilisation de la fonction Wrapper :
func wrap(f func()) { defer func() { if r := recover(); r != nil { fmt.Println("Caught:", r) } }() f() }
Utilisation :
go wrap(func() { panic("catch me") })
Avantages de la fonction Wrapper Approche :
Remarque :
Les paniques doivent être gérées au sein de la goroutine où ils se produisent. L'utilisation d'une fonction wrapper permet la récupération, mais la goroutine est toujours terminé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!