Jag kunde bara se att koden startade, sedan ingenting
Som du har räknat ut beror detta på att DialInfo som standard har noll timeout. Samtalet blockeras för alltid och väntar på att en anslutning upprättas. Du kan också ange en timeout med:
dialInfo.Timeout = time.Duration(30)
session, err := mgo.DialWithInfo(dialInfo)
Nu får jag inga nåbara servrar
Detta beror på att globalsign/mgo för närvarande inte stöder SRV-anslutningssträng-URI ännu. Se problem 112. Du kan använda URI-formatet utan srv-anslutning (MongoDB v3.4), se en relaterad fråga StackOverflow:41173720.
Du kan använda mongo-go-driver istället om du vill ansluta med SRV-anslutningens URI, till exempel:
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")
Ovanstående exempel är kompatibelt med den aktuella versionen v1.0.0