package data import ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "voucher/internal/conf" ) type GormDb struct { Client *gorm.DB } func NewGormDb(c *conf.Bootstrap) (*GormDb, func()) { db1, mf := db(c.Data.Db) cleanup := func() { mf() } return &GormDb{ Client: db1, }, cleanup } func db(data *conf.Data_Database) (*gorm.DB, func()) { gormDB, err := gorm.Open( mysql.Open(data.Source), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), SkipDefaultTransaction: true, }, ) if err != nil { panic("failed to connect database " + err.Error()) } sqlDB, err := gormDB.DB() if err != nil { panic("failed to gormDB " + err.Error()) } sqlDB.SetMaxIdleConns(1000) sqlDB.SetMaxOpenConns(1000) return gormDB, func() { if gormDB != nil { fmt.Println("关闭 db") } } } //func db(data *conf.Data_Database) (*gorm.DB, func()) { // //mysqlConn, err := sql.Open(data.Driver, data.Source) // // gormDB, err := gorm.Open( // mysql.Open(data.Source), // //&gorm.Config{ // // Logger: logger.Default.LogMode(logger.Info), // //}, // ) // // if err != nil { // panic("failed to connect database " + err.Error()) // } // // sqlDB, err := gormDB.DB() // if err != nil { // panic("failed to gormDB " + err.Error()) // } // // //sqlDB.SetMaxIdleConns(int(data.MaxIdle)) // sqlDB.SetMaxIdleConns(1000) // //sqlDB.SetMaxOpenConns(int(data.MaxOpen)) // sqlDB.SetMaxOpenConns(1000) // //sqlDB.SetConnMaxLifetime(1 * time.Hour) // //sqlDB.SetConnMaxIdleTime(15 * time.Minute) // // return gormDB, func() { // // if gormDB != nil { // fmt.Println("关闭 db") // } // // } //}