Panic Recovery in Golang with MGO: Preventing "No Reachable Servers" Panic
When connecting to a MongoDB instance using the MGO library in Go, it's possible to encounter a "no reachable servers" panic if the instance is unavailable or offline. This can lead to unexpected program termination.
To prevent this issue, we can implement a recovery mechanism using the defer and recover functions in Go. However, the provided solution in the question is not working effectively.
Modified Code:
Below is a modified version of the given code that successfully recovers from the panic and allows the program to continue execution:
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") } }
In this code, we use a defer function to catch the panic caused by the DialWithTimeout call. If a panic occurs, we print an error message and continue the program's execution, preventing it from terminating prematurely.
Output with MongoDB Down:
When MongoDB is down, the program produces the following output:
enter main - connecting to mongo Unable to connect to MongoDB. Received panic: no reachable servers Not Connected
Output with MongoDB Up:
When MongoDB is up, the program produces the following output:
enter main - connecting to mongo Got a collection object Connected
By catching the panic and providing an informative error message, we can ensure that the program continues to run and can gracefully handle temporary network issues or MongoDB outages.
The above is the detailed content of How to Prevent 'No Reachable Servers' Panic in Golang with MGO?. For more information, please follow other related articles on the PHP Chinese website!