Maison >développement back-end >Golang >Comment éviter la panique « Aucun serveur accessible » dans Golang avec MGO ?

Comment éviter la panique « Aucun serveur accessible » dans Golang avec MGO ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-28 15:08:11954parcourir

How to Prevent

Récupération de panique dans Golang avec MGO : prévenir la panique « aucun serveur accessible »

Lors de la connexion à une instance MongoDB à l'aide de la bibliothèque MGO dans Go , il est possible de rencontrer une panique « aucun serveur accessible » si l'instance est indisponible ou hors ligne. Cela peut entraîner une interruption inattendue du programme.

Pour éviter ce problème, nous pouvons implémenter un mécanisme de récupération à l'aide des fonctions de report et de récupération de Go. Cependant, la solution fournie dans la question ne fonctionne pas efficacement.

Code modifié :

Vous trouverez ci-dessous une version modifiée du code donné qui récupère avec succès de la panique et permet au programme de continuer l'exécution :

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")
    }
}

Dans ce code, nous utilisons une fonction defer pour intercepter la panique provoquée par l'appel DialWithTimeout. En cas de panique, nous imprimons un message d'erreur et poursuivons l'exécution du programme, l'empêchant de se terminer prématurément.

Sortie avec MongoDB Down :

Lorsque MongoDB est en panne, le programme produit le résultat suivant :

enter main - connecting to mongo
Unable to connect to MongoDB. Received panic: no reachable servers
Not Connected

Sortie avec MongoDB Up :

Lorsque MongoDB est opérationnel, le programme produit le résultat suivant :

enter main - connecting to mongo
Got a collection object
Connected

En attrapant la panique et en fournissant un message d'erreur informatif, nous pouvons garantir que le programme continue pour s'exécuter et peut gérer avec élégance les problèmes de réseau temporaires ou les pannes de MongoDB.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn