package config import ( "fmt" "log/slog" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" ) // NewDB 初始化 MySQL 连接 func NewDB(cfg DatabaseConfig) (*gorm.DB, error) { gormCfg := &gorm.Config{ Logger: logger.Default.LogMode(logger.Warn), } db, err := gorm.Open(mysql.Open(cfg.DSN), gormCfg) if err != nil { return nil, fmt.Errorf("open mysql: %w", err) } sqlDB, err := db.DB() if err != nil { return nil, err } sqlDB.SetMaxOpenConns(cfg.MaxOpenConns) sqlDB.SetMaxIdleConns(cfg.MaxIdleConns) sqlDB.SetConnMaxLifetime(cfg.ConnMaxLifetime) if err := sqlDB.Ping(); err != nil { return nil, fmt.Errorf("ping mysql: %w", err) } slog.Info("mysql connected") return db, nil }