使用MGO 在Golang 中進行恐慌恢復:防止「無法存取伺服器」恐慌
使用Go 連接中的MongoGO 實例連接到MongoDB 實例時,如果實例不可用或離線,則可能會遇到「無法存取伺服器」的恐慌。這可能會導致程式意外終止。
為了防止這個問題,我們可以使用Go中的defer和recover函數來實現復原機制。然而,問題中提供的解決方案並不能有效地運作。
修改後的程式碼:
以下是給定程式碼的修改版本,它成功地從恐慌中恢復並且允許程式繼續執行:
package main import ( "fmt" "time" ) import ( "labix.org/v2/mgo" ) func connectToMongo() bool { fmt.Println("enter main - connecting to mongo") defer func() { if r := recover(); r != nil { fmt.Println("Unable to connect to MongoDB. Received panic:", r) } }() maxWait := time.Duration(5 * time.Second) session, err := mgo.DialWithTimeout("localhost:27017", maxWait) if err != nil { return false } session.SetMode(mgo.Monotonic, true) coll := session.DB("MyDB").C("MyCollection") if coll != nil { fmt.Println("Got a collection object") return true } fmt.Println("Unable to retrieve collection") return false } func main() { if connectToMongo() { fmt.Println("Connected") } else { fmt.Println("Not Connected") } }
在這段程式碼中,我們使用defer 函數來捕捉由DialWithTimeout 通話。如果發生恐慌,我們會列印錯誤訊息並繼續執行程序,防止程序過早終止。
MongoDB 宕機時的輸出:
當MongoDB 宕機時,程式產生下列輸出:
enter main - connecting to mongo Unable to connect to MongoDB. Received panic: no reachable servers Not Connected
使用MongoDB 輸出Up:
當MongoDB 啟動時,程式會產生以下輸出:
enter main - connecting to mongo Got a collection object Connected
透過擷取恐慌並提供資訊豐富的錯誤訊息,我們可以確保程式繼續運作並可以優雅地處理臨時網路問題或 MongoDB 中斷。
以上是如何使用 MGO 防止 Golang 中的「無法存取伺服器」恐慌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!