Widziałem tylko, że kod się zaczął, potem nic
Jak już się zorientowałeś, dzieje się tak dlatego, że DialInfo domyślnie ma zerowy limit czasu. Połączenie zostanie zablokowane na zawsze w oczekiwaniu na nawiązanie połączenia. Możesz również określić limit czasu za pomocą:
dialInfo.Timeout = time.Duration(30)
session, err := mgo.DialWithInfo(dialInfo)
Teraz nie otrzymuję żadnych osiągalnych serwerów
Dzieje się tak, ponieważ globalsign/mgo nie obsługuje jeszcze identyfikatora URI ciągu połączenia SRV. Zobacz zagadnienia 112. Możesz użyć formatu URI połączenia innego niż srv (MongoDB v3.4), zobacz powiązane pytanie StackOverflow:41173720.
Możesz zamiast tego użyć mongo-go-driver, jeśli chcesz połączyć się za pomocą identyfikatora URI połączenia SRV, na przykład:
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")
Powyższy przykład jest kompatybilny z aktualną wersją v1.0.0