>  기사  >  백엔드 개발  >  Go에서 MGO를 사용하여 MongoDB에 연결할 때 "접속 가능한 서버 없음" 패닉을 복구하는 방법은 무엇입니까?

Go에서 MGO를 사용하여 MongoDB에 연결할 때 "접속 가능한 서버 없음" 패닉을 복구하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-16 08:01:02122검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.