Maison  >  Article  >  développement back-end  >  Comment gérer la panique lors de l'échec de MGO DialWithTimeout() de Go ?

Comment gérer la panique lors de l'échec de MGO DialWithTimeout() de Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-24 17:39:18314parcourir

How to Handle Panic in Go's MGO DialWithTimeout() Failure?

Gestion de la panique dans le MGO de Go : échec de DialWithTimeout()

Considérez la situation suivante : vous disposez d'une fonction Go qui se connecte à une instance MongoDB à l'aide de la bibliothèque mgo. Cependant, vous souhaitez gérer le cas où MongoDB n'est pas disponible sans faire planter le programme.

Le code d'origine tente d'y parvenir en utilisant un mécanisme de report/récupération. Cependant, la panique provoque toujours la fermeture du programme. Explorons une approche révisée :

package main

import (
    "fmt"
    "time"
)

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

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

    // Handle 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 révisé :

  • Le bloc defer appelle désormais explicitement recovery() et gère la valeur récupérée (panique) comme une erreur. Cette récupération de panique empêche le programme de se fermer.
  • La fonction DialWithTimeout est appelée avec l'hôte et le port MongoDB corrects (dans cet exemple, localhost:27017).
  • Le programme imprime un message pour indiquer qu'il se soit connecté avec succès à MongoDB ou non.

En implémentant ce mécanisme de gestion des erreurs, vous pouvez gérer avec élégance la situation où MongoDB n'est pas disponible sans faire planter votre programme. Cela permet à votre application de continuer à traiter d'autres tâches ou d'échouer normalement avec un message d'erreur descriptif.

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