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

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

Barbara Streisand
リリース: 2024-11-16 08:01:02
オリジナル
222 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート