Go 中的恐慌處理:處理MGO 中的「無法存取的伺服器」
在使用MGO 庫連接MongoDB 的Go 程式中,遇到「無法存取伺服器」錯誤可能會導致程式出現緊急情況並突然退出。為了讓程式即使在沒有 MongoDB 連接的情況下也能繼續執行,從這種恐慌中優雅地恢復至關重要。
在提供的程式碼中,使用recover()函數來捕捉恐慌。然而,目前的實作還不夠,因為恐慌仍然會導致程式終止。為了修正這個問題,程式碼的修改版本如下:
package main import ( "fmt" "time" ) import ( "labix.org/v2/mgo" ) func connectToMongo() bool { ret := false fmt.Println("enter main - connecting to mongo") // Defer and recover from potential 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") } }
在此更新的程式碼中,recover() 函數在 defer 區塊內調用,確保它在函數返回之前執行。如果 connectToMongo() 函數中發生緊急情況,recover() 函數會捕獲它並列印緊急訊息。這允許程式繼續執行,而不是提前終止。
透過遵循此技術,可以在 MGO 中優雅地處理「無法存取伺服器」錯誤,即使在 MongoDB 不可用時也允許程式繼續運行.
以上是如何優雅地處理 Go 的 MGO 庫中的「No Reachable Servers」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!