Ik kon alleen zien dat de code begon, daarna niets
Zoals je hebt ontdekt, komt dit omdat DialInfo standaard een time-out van nul heeft. De oproep wordt voor altijd geblokkeerd in afwachting van het tot stand brengen van een verbinding. U kunt ook een time-out specificeren met:
dialInfo.Timeout = time.Duration(30)
session, err := mgo.DialWithInfo(dialInfo)
Nu krijg ik geen bereikbare servers
Dit komt omdat globalsign/mgo momenteel nog geen SRV-verbindingstekenreeks-URI ondersteunt. Zie problemen 112. U kunt de niet-srv-verbinding URI-indeling (MongoDB v3.4) gebruiken, zie een gerelateerde vraag StackOverflow:41173720.
U kunt in plaats daarvan mongo-go-driver gebruiken als u verbinding wilt maken via de SRV-verbindings-URI, bijvoorbeeld:
mongoURI := "mongodb+srv://admin:[email protected]/dbname?ssl=true&retryWrites=true"
client, err := mongo.NewClient(options.Client().ApplyURI(mongoURI))
if err != nil {
log.Fatal(err)
}
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
err = client.Connect(ctx)
defer client.Disconnect(ctx)
if err != nil {
log.Fatal(err)
}
database := client.Database("go")
collection := database.Collection("atlas")
Het bovenstaande voorbeeld is compatibel met de huidige versie v1.0.0