Maison >développement back-end >Golang >Comment récupérer gracieusement des échecs de connexion MongoDB dans Go avec MGO ?
Récupération après un échec de connexion MongoDB dans Go avec MGO
Dans Go, le package MGO est utilisé pour interagir avec MongoDB. Cependant, la connexion à MongoDB peut parfois échouer, provoquant une panique dans le programme. Cet article fournit une solution pour récupérer gracieusement de tels échecs de connexion.
La fonction suivante tente de se connecter à MongoDB et renvoie une session et une collection en cas de succès :
func connectToMongo(sess *mgo.Session, coll *mgo.Collection, sessionErr error) bool { fmt.Println("enter main - connecting to mongo") 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") return true } } else { // never gets here fmt.Println("Unable to connect to local mongo instance!") } return false }
Le problème avec l'original Le code est que la panique interrompt le programme avant que la fonction de report puisse s'exécuter. Pour résoudre ce problème, la fonction recovery() doit être appelée dans l'instruction defer, après la tentative de connexion.
Le code modifié :
var mongoUp bool func init() { if ( connectToMongo() ) { mongoUp := true fmt.Println("Connected") } else { mongoUp = false fmt.Println("Not Connected") } }
Lorsque MongoDB est en cours d'exécution, le programme se connecte avec succès et définit mongoUp sur true. Lorsque MongoDB n'est pas en cours d'exécution, le programme enregistre l'échec et définit mongoUp sur false.
Cette solution permet au programme de gérer gracieusement les échecs de connexion MongoDB et de poursuivre l'exécution sans planter.
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!