首页  >  文章  >  后端开发  >  在 Go 中使用 MGO 连接到 MongoDB 时如何从“无法访问服务器”的恐慌中恢复?

在 Go 中使用 MGO 连接到 MongoDB 时如何从“无法访问服务器”的恐慌中恢复?

Barbara Streisand
Barbara Streisand原创
2024-11-16 08:01:02122浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn