Ich konnte nur sehen, dass der Code gestartet wurde, dann nichts
Wie Sie herausgefunden haben, liegt dies daran, dass DialInfo standardmäßig ein Null-Timeout hat. Der Anruf wird für immer blockiert und wartet darauf, dass eine Verbindung hergestellt wird. Sie können auch ein Timeout angeben mit:
dialInfo.Timeout = time.Duration(30)
session, err := mgo.DialWithInfo(dialInfo)
Jetzt erhalte ich keine erreichbaren Server
Dies liegt daran, dass globalsign/mgo derzeit noch keine SRV-Verbindungszeichenfolgen-URI unterstützt. Siehe Probleme 112. Sie können das Nicht-srv-Verbindungs-URI-Format (MongoDB v3.4) verwenden, siehe verwandte Frage StackOverflow:41173720.
Sie können stattdessen mongo-go-driver verwenden, wenn Sie eine Verbindung über den SRV-Verbindungs-URI herstellen möchten, zum Beispiel:
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")
Das obige Beispiel ist kompatibel mit der aktuellen Version v1.0.0