package mysql import ( "MeterService/core/config" "database/sql" "errors" "fmt" "sync" orm "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) type MySqlPool struct{} var once sync.Once var err error var db *orm.DB func GetDb() *orm.DB { once.Do(func() { db = openMySqlPool() }) return db } func OpenMySql() *sql.DB { return openMySqlPool().DB() } func openMySqlPool() *orm.DB { dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", config.C.Mysql.Username, config.C.Mysql.Password, config.C.Mysql.Host, config.C.Mysql.Port, config.C.Mysql.Name) db, err := orm.Open("mysql", dsn) if err != nil { panic(errors.New("mysql连接失败。" + err.Error())) } if config.C.Mysql.MaxIdleConns > 0 { db.DB().SetMaxIdleConns(config.C.Mysql.MaxIdleConns) } if config.C.Mysql.MaxOpenConns > 0 { db.DB().SetMaxOpenConns(config.C.Mysql.MaxOpenConns) } if config.C.Mysql.Log { db.LogMode(config.C.Mysql.Log) } return db } func CloseDb(db *orm.DB) { err := db.Close() if err != nil { return } else { panic(err) } } func (pool *MySqlPool) InitPool() (isSuc bool) { dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", config.C.Mysql.Username, config.C.Mysql.Password, config.C.Mysql.Host, config.C.Mysql.Port, config.C.Mysql.Name) db, err := orm.Open("mysql", dsn) if err != nil { panic(err) return false } // 连接数配置也可以写入配置,在此读取 if config.C.Mysql.MaxIdleConns > 0 { db.DB().SetMaxIdleConns(config.C.Mysql.MaxIdleConns) } if config.C.Mysql.MaxOpenConns > 0 { db.DB().SetMaxOpenConns(config.C.Mysql.MaxOpenConns) } return true }