首頁 > 後端開發 > Golang > 在 Go 中使用 MGO 連接到 MongoDB 時如何從「無法存取伺服器」的恐慌中恢復?

在 Go 中使用 MGO 連接到 MongoDB 時如何從「無法存取伺服器」的恐慌中恢復?

Barbara Streisand
發布: 2024-11-16 08:01:02
原創
221 人瀏覽過

How to Recover from

Golang / Mongo:處理“無法訪問的服務器”恐慌

問題:

何時嘗試使用Go 中的MGO 連接到Mongo,如果伺服器無法訪問,則會引發恐慌。如何恢復這種恐慌以允許程式繼續執行?

答案:

為了處理MGO 在沒有可用伺服器時引發的恐慌,可以使用以下程式碼:

import (
    "labix.org/v2/mgo"
)

func connectToMongo() bool {
    // Define a flag to indicate success
    ret := false

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Detected panic")
        }
    }()

    maxWait := time.Duration(5 * time.Second)
    session, sessionErr := mgo.DialWithTimeout("localhost", 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
}
登入後複製

在此修改版本中:

  1. defer 語句移到DialWithTimeout 呼叫之後,這確保無論呼叫是否成功它都會執行或恐慌。
  2. 在 defer 函式中,recover() 函式用於捕捉恐慌。這可以確保程序不會因恐慌而退出。
  3. 新增 fmt.Println("Detected Panic") 語句以指示偵測到恐慌。
  4. var ok bool和 err, ok := r.(error) 被刪除,因為它們對於這種情況是不必要的。

透過合併這些更改,程式可以處理由於 MGO 無法連接到 Mongo 和繼續執行而不退出。

以上是在 Go 中使用 MGO 連接到 MongoDB 時如何從「無法存取伺服器」的恐慌中恢復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板