Видях само, че кодът стартира, след това нищо
Както разбрахте, това е, защото DialInfo по подразбиране има нулево време за изчакване. Обаждането ще блокира завинаги в очакване за установяване на връзка. Можете също да посочите изчакване с:
dialInfo.Timeout = time.Duration(30)
session, err := mgo.DialWithInfo(dialInfo)
Сега не получавам достъпни сървъри
Това е така, защото globalsign/mgo в момента все още не поддържа SRV URI на низ за връзка. Вижте проблеми 112. Можете да използвате URI формата на връзката без srv (MongoDB v3.4), вижте свързан въпрос StackOverflow:41173720.
Вместо това можете да използвате mongo-go-driver, ако искате да се свържете с помощта на URI на връзката SRV, например:
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")
Горният пример е съвместим с текущата версия v1.0.0