package mysql import ( commonConfig "common/config" "common/log" "common/query" "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" "time" ) const ( DBNameEcosmos = "ecosmos" DBNameEcosmosShop = "ecosmos_shop" ) var dbs = make(map[string]*gorm.DB) var queryS = make(map[string]*query.Query) func Init(cfg *commonConfig.MysqlConfig) error { db, err := initOneDB(cfg, DBNameEcosmosShop) if err != nil { return err } queryS[DBNameEcosmosShop] = query.Use(db) db, err = initOneDB(cfg, DBNameEcosmos) if err != nil { return err } query.SetDefault(db) queryS[DBNameEcosmos] = query.Q return nil } func initOneDB(cfg *commonConfig.MysqlConfig, dbName string) (*gorm.DB, error) { dialect := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", cfg.User, cfg.Password, cfg.Host, cfg.Port, dbName) db, err := gorm.Open( mysql.New( mysql.Config{ DSN: dialect, }, ), &gorm.Config{ TranslateError: true, }, ) if err != nil { return nil, err } sqlDb, err := db.DB() if err != nil { return nil, err } sqlDb.SetMaxOpenConns(50) sqlDb.SetMaxIdleConns(5) sqlDb.SetConnMaxLifetime(time.Second * 10) if err = sqlDb.Ping(); err != nil { return nil, err } dbs[dbName] = db return db.Debug(), nil } func DBQuery(dbName string) *query.Query { if q, ok := queryS[dbName]; ok { return q } log.Errorf("mysql db not init: %v", dbName) return nil } func Close() error { fmt.Println("close mysql connect") for _, db := range dbs { sqlDb, err := db.DB() if err != nil { return err } err = sqlDb.Close() if err != nil { return err } } return nil }