다음 상황을 고려하십시오. mgo 라이브러리를 사용하여 MongoDB 인스턴스에 연결하는 Go 함수가 있습니다. 그러나 프로그램 충돌 없이 MongoDB를 사용할 수 없는 경우를 처리하고 싶습니다.
원래 코드는 연기/복구 메커니즘을 사용하여 이를 달성하려고 합니다. 그러나 패닉으로 인해 여전히 프로그램이 종료됩니다. 수정된 접근 방식을 살펴보겠습니다.
package main import ( "fmt" "time" ) import ( "labix.org/v2/mgo" ) func connectToMongo() bool { ret := false fmt.Println("enter main - connecting to mongo") // Handle 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") } }
이 수정된 코드에서:
이 오류 처리 메커니즘을 구현하면 프로그램 충돌 없이 MongoDB를 사용할 수 없는 상황. 이를 통해 애플리케이션이 다른 작업을 계속 처리하거나 설명 오류 메시지와 함께 정상적으로 실패할 수 있습니다.
위 내용은 Go의 MGO DialWithTimeout() 실패 시 패닉을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!