Go でのパニック処理: MGO での「到達可能なサーバーなし」の処理
Go プログラムで MGO ライブラリを使用して MongoDB に接続すると、 「到達可能なサーバーがありません」エラーにより、プログラムがパニックを起こし、突然終了する可能性があります。 MongoDB 接続がない場合でもプログラムが実行を継続できるようにするには、このパニックから適切に回復することが重要です。
提供されたコードでは、パニックを捕捉するために、recover() 関数が使用されています。ただし、パニックが依然としてプログラムの終了につながるため、現在の実装では不十分です。これを修正するために、コードの修正バージョンを以下に示します。
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") } }
この更新されたコードでは、recover() 関数が defer ブロック内で呼び出され、関数が戻る前に確実に実行されます。 connectToMongo() 関数内でパニックが発生した場合、recover() 関数がそれを捕捉し、パニック メッセージを出力します。これにより、プログラムが途中で終了するのではなく、実行を継続できるようになります。
この手法に従うことで、MGO で「到達可能なサーバーがありません」エラーを適切に処理することができ、MongoDB が利用できない場合でもプログラムの動作を継続できるようになります。 .
以上がGo の MGO ライブラリで「到達可能なサーバーがありません」エラーを適切に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。