Maison > Article > développement back-end > Comment gérer la panique lors de l'échec de MGO DialWithTimeout() de Go ?
Considérez la situation suivante : vous disposez d'une fonction Go qui se connecte à une instance MongoDB à l'aide de la bibliothèque mgo. Cependant, vous souhaitez gérer le cas où MongoDB n'est pas disponible sans faire planter le programme.
Le code d'origine tente d'y parvenir en utilisant un mécanisme de report/récupération. Cependant, la panique provoque toujours la fermeture du programme. Explorons une approche révisée :
package main import ( "fmt" "time" ) import ( "labix.org/v2/mgo" ) func connectToMongo() bool { ret := false fmt.Println("enter main - connecting to mongo") // Handle panic defer func() { if r := recover(); r != nil { fmt.Println("Detected panic") var ok bool err, ok := r.(error) if !ok { fmt.Printf("pkg: %v, error: %s", r, err) } } }() maxWait := time.Duration(5 * time.Second) session, sessionErr := mgo.DialWithTimeout("localhost:27017", maxWait) if sessionErr == nil { session.SetMode(mgo.Monotonic, true) coll := session.DB("MyDB").C("MyCollection") if (coll != nil) { fmt.Println("Got a collection object") ret = true } } else { // never gets here fmt.Println("Unable to connect to local mongo instance!") } return ret } func main() { if (connectToMongo()) { fmt.Println("Connected") } else { fmt.Println("Not Connected") } }
Dans ce code révisé :
En implémentant ce mécanisme de gestion des erreurs, vous pouvez gérer avec élégance la situation où MongoDB n'est pas disponible sans faire planter votre programme. Cela permet à votre application de continuer à traiter d'autres tâches ou d'échouer normalement avec un message d'erreur descriptif.
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!