Récupération de panique dans Golang avec MGO : prévenir la panique « aucun serveur accessible »
Lors de la connexion à une instance MongoDB à l'aide de la bibliothèque MGO dans Go , il est possible de rencontrer une panique « aucun serveur accessible » si l'instance est indisponible ou hors ligne. Cela peut entraîner une interruption inattendue du programme.
Pour éviter ce problème, nous pouvons implémenter un mécanisme de récupération à l'aide des fonctions de report et de récupération de Go. Cependant, la solution fournie dans la question ne fonctionne pas efficacement.
Code modifié :
Vous trouverez ci-dessous une version modifiée du code donné qui récupère avec succès de la panique et permet au programme de continuer l'exécution :
package main import ( "fmt" "time" ) import ( "labix.org/v2/mgo" ) func connectToMongo() bool { fmt.Println("enter main - connecting to mongo") defer func() { if r := recover(); r != nil { fmt.Println("Unable to connect to MongoDB. Received panic:", r) } }() maxWait := time.Duration(5 * time.Second) session, err := mgo.DialWithTimeout("localhost:27017", maxWait) if err != nil { return false } session.SetMode(mgo.Monotonic, true) coll := session.DB("MyDB").C("MyCollection") if coll != nil { fmt.Println("Got a collection object") return true } fmt.Println("Unable to retrieve collection") return false } func main() { if connectToMongo() { fmt.Println("Connected") } else { fmt.Println("Not Connected") } }
Dans ce code, nous utilisons une fonction defer pour intercepter la panique provoquée par l'appel DialWithTimeout. En cas de panique, nous imprimons un message d'erreur et poursuivons l'exécution du programme, l'empêchant de se terminer prématurément.
Sortie avec MongoDB Down :
Lorsque MongoDB est en panne, le programme produit le résultat suivant :
enter main - connecting to mongo Unable to connect to MongoDB. Received panic: no reachable servers Not Connected
Sortie avec MongoDB Up :
Lorsque MongoDB est opérationnel, le programme produit le résultat suivant :
enter main - connecting to mongo Got a collection object Connected
En attrapant la panique et en fournissant un message d'erreur informatif, nous pouvons garantir que le programme continue pour s'exécuter et peut gérer avec élégance les problèmes de réseau temporaires ou les pannes de MongoDB.
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!