Wiederherstellung nach einem MongoDB-Verbindungsfehler in Go mit MGO
In Go wird das MGO-Paket für die Interaktion mit MongoDB verwendet. Allerdings kann die Verbindung zu MongoDB manchmal fehlschlagen, was zu einer Panik im Programm führt. Dieser Artikel bietet eine Lösung für die ordnungsgemäße Wiederherstellung nach solchen Verbindungsfehlern.
Die folgende Funktion versucht, eine Verbindung zu MongoDB herzustellen und bei Erfolg eine Sitzung und Sammlung zurückzugeben:
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 }
Das Problem mit dem Original Code besteht darin, dass die Panik das Programm unterbricht, bevor die Verzögerungsfunktion ausgeführt werden kann. Um dies zu beheben, sollte die Funktion „recover()“ innerhalb der Defer-Anweisung nach dem Verbindungsversuch aufgerufen werden.
Der geänderte Code:
var mongoUp bool func init() { if ( connectToMongo() ) { mongoUp := true fmt.Println("Connected") } else { mongoUp = false fmt.Println("Not Connected") } }
Wenn MongoDB ausgeführt wird, stellt das Programm erfolgreich eine Verbindung her und setzt mongoUp auf true. Wenn MongoDB nicht ausgeführt wird, protokolliert das Programm den Fehler und setzt mongoUp auf „false“.
Diese Lösung ermöglicht es dem Programm, MongoDB-Verbindungsfehler ordnungsgemäß zu verarbeiten und die Ausführung ohne Absturz fortzusetzen.
Das obige ist der detaillierte Inhalt vonWie kann man MongoDB-Verbindungsfehler in Go mit MGO ordnungsgemäß wiederherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!