Maison >développement back-end >Golang >Comment puis-je faire fonctionner mes Go Goroutines même après une panique ?
Maintenir les goroutines en marche malgré les crashs
Dans Go, les goroutines sont puissantes mais peuvent être sensibles aux plantages dus à des erreurs ou à des paniques. Pour garantir que l'échec d'une goroutine n'affecte pas les autres, les développeurs peuvent se demander s'il existe un moyen de maintenir les goroutines non affectées en fonctionnement.
Pour se remettre d'une panique, la fonction intégrée recovery() est utilisée. Il permet d'attraper une panique au sein d'une fonction différée. La fonction d'assistance suivante, Protect(), utilise ce mécanisme pour lancer des goroutines avec récupération de panique :
func protect(f func()) { defer func() { if err := recover(); err != nil { log.Printf("Recovered: %v", err) } }() f() }
Pour utiliser cette protection, transmettez simplement votre fonction comme argument à Protect(). En enveloppant cet appel dans une boucle for qui imprime continuellement « tick », nous pouvons démontrer comment la goroutine protégée par Protect() continuera à fonctionner même si une panique se produit dans une autre goroutine :
func main() { go protect(doPanic) for { time.Sleep(time.Second) fmt.Println("tick") } }
Cette application de test affichera :
2021/03/04 14:12:31 about to panic 2021/03/04 14:12:31 Recovered: test tick tick tick ...
Comme vous pouvez le voir, la panique dans la fonction doPanic est récupérée et gérée, tandis que la goroutine protégée continue de s'exécuter et d'imprimer "tick". Cette approche isole efficacement les goroutines des paniques, garantissant qu'un seul échec ne se propage pas et ne plante pas l'ensemble de l'application.
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!