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
Release: 2024-11-28 15:08:11
Original
925 people have browsed it

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")
    }
}
Copy after login

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
Copy after login

Output with MongoDB Up:

When MongoDB is up, the program produces the following output:

enter main - connecting to mongo
Got a collection object
Connected
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template