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
Libérer: 2024-11-28 15:08:11
original
925 Les gens l'ont consulté

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")
    }
}
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal