ホームページ  >  記事  >  バックエンド開発  >  Go で MGO を使用して MongoDB に接続するときに発生する「到達可能なサーバーがありません」パニックから回復する方法

Go で MGO を使用して MongoDB に接続するときに発生する「到達可能なサーバーがありません」パニックから回復する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-11-16 08:01:02122ブラウズ

How to Recover from

Golang / Mongo: 「到達可能なサーバーなし」パニックの処理

問題:

の場合Go で MGO を使用して Mongo に接続しようとすると、サーバーに到達できない場合にパニックが発生します。このパニックを回復してプログラムの実行を継続できるようにするにはどうすればよいですか?

回答:

到達可能なサーバーが利用できないときに MGO によってスローされたパニックを処理するには、次のコードを使用できます:

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

func connectToMongo() bool {
    // Define a flag to indicate success
    ret := false

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Detected panic")
        }
    }()

    maxWait := time.Duration(5 * time.Second)
    session, sessionErr := mgo.DialWithTimeout("localhost", 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
}

この修正バージョンでは:

  1. defer ステートメントは DialWithTimeout 呼び出しの後に移動され、呼び出しが成功したかどうかに関係なく確実に実行されます。
  2. defer 関数内で、recover() 関数を使用してパニックを捕捉します。これにより、プログラムがパニックによって終了しないことが保証されます。
  3. パニックが検出されたことを示すために、fmt.Println("Detected Panic") ステートメントが追加されます。
  4. var ok boolおよび err, ok := r.(error) は、このシナリオには不要であるため削除されています。

これらの変更を組み込むことで、プログラムは MGO が Mongo に接続できないことによって引き起こされるパニックに対処でき、終了せずに実行を継続します。

以上がGo で MGO を使用して MongoDB に接続するときに発生する「到達可能なサーバーがありません」パニックから回復する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。