package database import ( "context" "sync" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) var ( client *mongo.Client once sync.Once ) // GetMongoDBInstance return instance of mongoDB client func GetMongoDBInstance(ctx context.Context, mongoDBURI string) *mongo.Client { once.Do(func() { client = initMongoDBClient(ctx, mongoDBURI) }) return client } // initMongoDBClient return successfully initialized mongoDB client func initMongoDBClient(ctx context.Context, mongoDBURI string) *mongo.Client { ctx, cancel := context.WithTimeout(ctx, 10*time.Second) defer cancel() mongoDBClient, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoDBURI)) if err != nil { panic(err) } return mongoDBClient }