Maison >développement back-end >Golang >Comment puis-je gérer avec élégance les erreurs « Aucun serveur accessible » dans la bibliothèque MGO de Go ?

Comment puis-je gérer avec élégance les erreurs « Aucun serveur accessible » dans la bibliothèque MGO de Go ?

DDD
DDDoriginal
2024-11-24 11:35:15739parcourir

How Can I Gracefully Handle

Gestion de la panique dans Go : gestion des "serveurs non accessibles" dans MGO

Les programmes In Go utilisant la bibliothèque MGO pour se connecter à MongoDB, rencontrant une erreur « aucun serveur accessible » peut provoquer la panique et la fermeture brusque d'un programme. Pour permettre aux programmes de poursuivre leur exécution même en l'absence de connectivité MongoDB, il est crucial de se remettre de cette panique avec élégance.

Dans le code fourni, la fonction recovery() est utilisée pour attraper la panique. Cependant, la mise en œuvre actuelle est insuffisante, car la panique conduit toujours à l'arrêt du programme. Pour remédier à cela, une version modifiée du code est présentée ci-dessous :

package main

import (
    "fmt"
    "time"
)

import (
    "labix.org/v2/mgo"
)

func connectToMongo() bool {
    ret := false
    fmt.Println("enter main - connecting to mongo")

    // Defer and recover from potential panic
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Detected panic")
            var ok bool
            err, ok := r.(error)
            if !ok {
                fmt.Printf("pkg:  %v,  error: %s", r, err)
            }
        }
    }()

    maxWait := time.Duration(5 * time.Second)
    session, sessionErr := mgo.DialWithTimeout("localhost:27017", maxWait)
    if sessionErr == nil {
        session.SetMode(mgo.Monotonic, true)
        coll := session.DB("MyDB").C("MyCollection")
        if coll != nil {
            fmt.Println("Got a collection object")
            ret = true
        }
    } else { // never gets here
        fmt.Println("Unable to connect to local mongo instance!")
    }
    return ret
}

func main() {
    if connectToMongo() {
        fmt.Println("Connected")
    } else {
        fmt.Println("Not Connected")
    }
}

Dans ce code mis à jour, la fonction recovery() est appelée dans un bloc defer, garantissant qu'elle est exécutée avant le retour de la fonction. Si une panique se produit dans la fonction connectToMongo(), la fonction recovery() l'attrape et imprime le message de panique. Cela permet au programme de continuer à s'exécuter, plutôt que de se terminer prématurément.

En suivant cette technique, il est possible de gérer l'erreur « aucun serveur accessible » avec élégance dans MGO, permettant aux programmes de continuer à fonctionner même lorsque MongoDB n'est pas disponible. .

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