package db import ( "database/sql" "sync" _ "github.com/go-sql-driver/mysql" "github.com/spf13/viper" ) var ActiveDB *sql.DB var lock = new(sync.Mutex) func GetDB() (*sql.DB, error) { if ActiveDB != nil { return ActiveDB, nil } db, err := ConnectDB() if err != nil { return nil, err } ActiveDB = db return db, nil } func ConnectDB() (*sql.DB, error) { lock.Lock() defer lock.Unlock() if ActiveDB != nil { ActiveDB.Close() ActiveDB = nil } cfg := viper.GetViper() db, err := sql.Open("mysql", cfg.GetString("MARIADB_CONNSTRING")) if err != nil { return nil, err } ActiveDB = db return db, nil }