package driver import ( "fmt" "time" // 添加 time 包导入 "github.com/jmoiron/sqlx" ) // DBConfig 数据库配置 type DBConfig struct { Type string `yaml:"type"` Host string `yaml:"host"` Port int `yaml:"port"` Username string `yaml:"username"` Password string `yaml:"password"` Database string `yaml:"database"` MaxOpenConns int `yaml:"max_open_conns"` MaxIdleConns int `yaml:"max_idle_conns"` ConnMaxLifetime int `yaml:"conn_max_lifetime"` // 单位:秒 } // DBDriver 数据库驱动接口 type DBDriver interface { // Name 返回驱动名称 Name() string // Open 打开数据库连接 Open(config DBConfig) (*sqlx.DB, error) // BuildDSN 构建连接字符串 BuildDSN(config DBConfig) string } var driverss = make(map[string]DBDriver) // Register 注册数据库驱动 func Register(driver DBDriver) { if driver == nil { panic("db driver: Register driver is nil") } name := driver.Name() if _, dup := driverss[name]; dup { panic("db driver: Register called twice for driver " + name) } driverss[name] = driver } // Get 获取数据库驱动 func Get(name string) (DBDriver, error) { driver, exists := driverss[name] if !exists { return nil, fmt.Errorf("db driver: unknown driver %q", name) } return driver, nil } // GetAllDrivers 获取所有已注册的驱动名称 func GetAllDrivers() []string { names := make([]string, 0, len(driverss)) for name := range driverss { names = append(names, name) } return names } // configureConnectionPool 配置连接池的公共函数 func configureConnectionPool(db *sqlx.DB, config DBConfig) { if config.MaxOpenConns > 0 { db.SetMaxOpenConns(config.MaxOpenConns) } if config.MaxIdleConns > 0 { db.SetMaxIdleConns(config.MaxIdleConns) } if config.ConnMaxLifetime > 0 { // 将秒转换为 time.Duration db.SetConnMaxLifetime(time.Duration(config.ConnMaxLifetime) * time.Second) } }