在 Go 中使用 MGO 從 MongoDB 連接失敗中恢復
在 Go 中,MGO 套件用於與 MongoDB 互動。但是,連接 MongoDB 有時會失敗,導致程式出現恐慌。本文提供了一種從此類連接失敗中正常恢復的解決方案。
以下函數嘗試連接到 MongoDB,如果成功則傳回會話和集合:
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 }
原始問題程式碼是在 defer 函數執行之前緊急中斷程式。若要解決此問題,應在嘗試連線後在 defer 語句內呼叫recover() 函數。
修改後的程式碼:
var mongoUp bool func init() { if ( connectToMongo() ) { mongoUp := true fmt.Println("Connected") } else { mongoUp = false fmt.Println("Not Connected") } }
當 MongoDB 執行時,程式成功連線並將 mongoUp 設為 true。當 MongoDB 未執行時,程式會記錄失敗並將 mongoUp 設為 false。
此解決方案可讓程式優雅地處理 MongoDB 連線失敗並繼續執行而不會崩潰。
以上是如何使用 MGO 從 Go 中的 MongoDB 連線故障中優雅地恢復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!