| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package drivers
-
- import (
- "database/sql"
- "fmt"
- "time" // 添加 time 包导入
- )
-
- // 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) (*sql.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 *sql.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)
- }
- }
|