Jalankan versi berikut dari kode yang Anda posting. Cobalah untuk tidak mengubah kode, setidaknya tidak mengubah posisi nomor baris. Dengan begitu, jika Anda memposting stacktrace, nomornya akan cocok.
package main
import (
"fmt"
"time"
)
import (
"labix.org/v2/mgo"
)
func connectToMongo() bool {
ret := false
fmt.Println("enter main - connecting to mongo")
// tried doing this - doesn't work as intended
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")
}
}
Saat MongoDB aktif, saya melihat:
enter main - connecting to mongo
Got a collection object
Connected
Saat MongoDB sedang down, saya melihat:
enter main - connecting to mongo
Unable to connect to local mongo instance!
Not Connected
Jika Anda tidak melihat perilaku yang sama, poskan hasilnya, termasuk kepanikan yang Anda lihat.