Home >Backend Development >Golang >How to Prevent 'No Reachable Servers' Panic in Golang with MGO?

How to Prevent 'No Reachable Servers' Panic in Golang with MGO?

Susan Sarandon
Susan SarandonOriginal
2024-11-28 15:08:111014browse

How to Prevent

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn