MGO를 사용하여 Go에서 MongoDB 연결 실패 복구
Go에서는 MGO 패키지를 사용하여 MongoDB와 상호작용합니다. 그러나 MongoDB 연결이 때때로 실패하여 프로그램에 패닉이 발생할 수 있습니다. 이 기사에서는 이러한 연결 실패를 정상적으로 복구할 수 있는 솔루션을 제공합니다.
다음 함수는 MongoDB에 연결을 시도하고 성공하면 세션과 컬렉션을 반환합니다.
func connectToMongo(sess *mgo.Session, coll *mgo.Collection, sessionErr error) bool { fmt.Println("enter main - connecting to mongo") 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") return true } } else { // never gets here fmt.Println("Unable to connect to local mongo instance!") } return false }
원본의 문제 코드는 defer 함수가 실행되기 전에 프로그램을 패닉 인터럽트로 만드는 것입니다. 이 문제를 해결하려면 연결 시도 후 defer 문 내에서 복구() 함수를 호출해야 합니다.
수정된 코드:
var mongoUp bool func init() { if ( connectToMongo() ) { mongoUp := true fmt.Println("Connected") } else { mongoUp = false fmt.Println("Not Connected") } }
MongoDB가 실행되면 프로그램이 성공적으로 연결됩니다. mongoUp을 true로 설정합니다. MongoDB가 실행되지 않을 때 프로그램은 실패를 기록하고 mongoUp을 false로 설정합니다.
이 솔루션을 사용하면 프로그램이 MongoDB 연결 실패를 적절하게 처리하고 충돌 없이 실행을 계속할 수 있습니다.
위 내용은 MGO를 사용하여 Go에서 MongoDB 연결 실패를 정상적으로 복구하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!