MGO を使用した Golang のパニック回復: 「到達可能なサーバーがない」パニックの防止
Go で MGO ライブラリを使用して MongoDB インスタンスに接続する場合、インスタンスが利用できないかオフラインの場合、「到達可能なサーバーがありません」というパニックが発生する可能性があります。これにより、プログラムが予期せず終了する可能性があります。
この問題を防ぐために、Go の defer 関数と Recovery 関数を使用して回復メカニズムを実装できます。ただし、質問で提供されている解決策は効果的に機能していません。
修正コード:
以下は、パニックから正常に回復し、プログラムが実行を継続できるようにします:
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") } }
このコードでは、defer 関数を使用して、 DialWithTimeout 呼び出し。パニックが発生した場合は、エラー メッセージを出力してプログラムの実行を続行し、プログラムが途中で終了するのを防ぎます。
MongoDB が停止している場合の出力:
MongoDB が停止している場合、プログラムは次の出力を生成します:
enter main - connecting to mongo Unable to connect to MongoDB. Received panic: no reachable servers Not Connected
MongoDB の出力Up:
MongoDB が起動すると、プログラムは次の出力を生成します:
enter main - connecting to mongo Got a collection object Connected
パニックを捕捉し、有益なエラー メッセージを提供することで、プログラムの継続を保証できます。実行でき、一時的なネットワークの問題や MongoDB の停止を適切に処理できます。
以上がMGO を使用して Golang で「到達可能なサーバーがありません」パニックを防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。