考虑以下情况:您有一个使用 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中文网其他相关文章!