考慮以下情況:您有一個使用 mgo 函式庫連接到 MongoDB 實例的 Go 函數。但是,您希望在不使程式崩潰的情況下處理 MongoDB 不可用的情況。
原始程式碼嘗試透過使用延遲/恢復機制來實現此目的。然而,恐慌仍然導致程序退出。讓我們來探索修改後的方法:
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") } }
在此修改後的程式碼中:
透過實作這個錯誤處理機制,可以優雅地處理以下情況: MongoDB 在不導致程式崩潰的情況下不可用。這允許您的應用程式繼續處理其他任務或優雅地失敗並顯示描述性錯誤訊息。
以上是如何處理 Go 的 MGO DialWithTimeout() 失敗所引起的恐慌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!