投稿したコードの次のバージョンを実行します。少なくとも行番号の位置を変更しないように、コードを変更しないようにしてください。そうすれば、スタックトレースを投稿すると、数値が一致します。
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")
}
}
MongoDBが起動すると、次のように表示されます:
enter main - connecting to mongo
Got a collection object
Connected
MongoDBがダウンすると、次のように表示されます:
enter main - connecting to mongo
Unable to connect to local mongo instance!
Not Connected
同じ動作が見られない場合は、見たパニックを含む出力を投稿してください。