github.com/lovung/GoCleanArchitecture@v0.0.0-20210302152432-50d91fd29f9f/pkg/gormer/gormer.go (about)

     1  package gormer
     2  
     3  import (
     4  	"sync"
     5  
     6  	"gorm.io/driver/mysql"
     7  	"gorm.io/gorm"
     8  )
     9  
    10  var (
    11  	once      sync.Once
    12  	singleton *gorm.DB
    13  )
    14  
    15  // OpenDBConnection opens a DB connection.
    16  func OpenDBConnection(connStr string, config gorm.Config) (*gorm.DB, error) {
    17  	var err error
    18  	once.Do(func() {
    19  		db, err := gorm.Open(mysql.Open(connStr), &config)
    20  		if err == nil {
    21  			singleton = db
    22  		}
    23  	})
    24  	if err != nil {
    25  		return nil, err
    26  	}
    27  	return singleton, nil
    28  }
    29  
    30  // GetDB gets the instance of singleton
    31  func GetDB() *gorm.DB {
    32  	return singleton
    33  }