Maison >développement back-end >Golang >Comment puis-je empêcher une seule panique Goroutine de faire planter l'intégralité de mon programme Go ?
Gérer les paniques dans les Goroutines pour garantir une exécution continue
Dans Go, les goroutines fournissent un mécanisme de concurrence léger. Cependant, lorsqu'une goroutine plante ou panique, le comportement par défaut est que l'ensemble du programme se ferme. Cela peut être problématique si vous souhaitez maintenir l'exécution d'autres goroutines qui ne sont pas liées à la goroutine en panne.
Pour résoudre ce problème, nous pouvons exploiter la fonction intégrée recovery() en conjonction avec des fonctions différées. La fonction recovery() nous permet de récupérer des paniques et de reprendre le contrôle du programme au sein de la goroutine où la panique s'est produite. Voici comment nous pouvons y parvenir :
Voici une version mise à jour de votre extrait de code intégrant le mécanisme de récupération :
func main() { // Create a separate goroutine for recovery go func() { defer func() { if err := recover(); err != nil { log.Printf("Recovered: %v", err) } }() // Wrap the potentially panicking functions in deferred function go func() { defer recover() queue.ConsumeAndDoSomething() }() go func() { defer recover() api.StartServer() }() }() // Block indefinitely to keep the program running <-make(chan struct{}) }
En implémentant ce mécanisme de récupération, nous garantissons que l'exécution des autres goroutines ne sera pas affectée si une goroutine panique. Le programme continuera à s'exécuter et à gérer les paniques avec élégance, offrant ainsi un environnement d'exécution plus résilient.
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!