package utils import ( "Quincy_admin/config" "fmt" "log" "sync" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" // MySQL驱动 "github.com/jmoiron/sqlx" ) var db *sqlx.DB // 全局数据库连接实例,使用sqlx.DB替代sql.DB var once sync.Once // 确保初始化只执行一次 // InitDB 初始化数据库连接 func InitDB(cfg *config.Config) (*sqlx.DB, error) { var err error once.Do(func() { // 构建数据库连接字符串 - 添加时区参数 dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true&loc=Asia%%2FShanghai", cfg.DB.User, cfg.DB.Password, cfg.DB.Host, cfg.DB.Port, cfg.DB.Name) // 使用sqlx.Open替代sql.Open db, err = sqlx.Open("mysql", dsn) if err != nil { log.Fatalf("Error opening database: %v", err) } // 测试数据库连接 err = db.Ping() if err != nil { log.Fatalf("Error connecting to database: %v", err) } // 设置连接池参数 db.SetMaxOpenConns(20) // 最大打开连接数 db.SetMaxIdleConns(10) // 最大空闲连接数 }) return db, err } // GetDB 从上下文中获取数据库连接 func GetDB(c *gin.Context) *sqlx.DB { return db }