Maison >développement back-end >Golang >Comment la fonction « recover() » de Go peut-elle maintenir plusieurs Goroutines en cours d'exécution après une panique ?
Maintenir plusieurs goroutines en cours d'exécution en cas de crash
Lorsque vous travaillez avec plusieurs goroutines dans Go, il est essentiel d'envisager des scénarios dans lesquels une goroutine peut planter ou paniquer, affectant potentiellement l'ensemble du programme. Pour éviter cela, le programme doit gérer ces situations avec élégance, permettant aux autres goroutines de continuer à s'exécuter.
Utilisation de la fonction de récupération
Go fournit la récupération intégrée ( ) fonction qui permet de gérer les paniques et de s'en remettre. Pour utiliser cette fonction, il faut qu'elle soit appelée au sein d'une fonction différée. De cette façon, si une panique se produit, elle est capturée et le programme reprend son exécution une fois la fonction différée terminée.
Voici un exemple de la façon dont recovery() peut être utilisé :
func doPanic() { fmt.Println("About to panic") panic("test") } func protect(f func()) { defer func() { if err := recover(); err != nil { fmt.Printf("Recovered: %v", err) } }() f() } func main() { go protect(doPanic) for { time.Sleep(time.Second) fmt.Println("Tick") } }
Explication
Sortie
Lorsque ce code est exécuté, il affichera :
About to panic Recovered: test Tick Tick Tick ...
Cela illustre que même si doPanic a provoqué une panique, le programme a continué à s'exécuter en raison de l'appel recovery(), permettant à l'autre goroutine de continuer à s'exécuter indéfiniment.
Il est important de noter que même si recovery() permet au programme de continuer à s'exécuter, cela n'empêche pas la panique sous-jacente de se produire. Par conséquent, il est toujours essentiel d’identifier et de traiter la cause profonde de la panique pour éviter qu’elle ne se reproduise à l’avenir.
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!