package databaseInit import ( "fmt" _ "github.com/go-sql-driver/mysql" "gopkg.in/yaml.v3" "gorm.io/driver/mysql" "gorm.io/gorm" "log" "os" "time" "toutoukan/model/config" ) var UserDB *gorm.DB var Dsn string func DbInit() { data, err := os.ReadFile("./config.yaml") if err != nil { panic(fmt.Errorf("读取配置文件失败: %w", err)) } // 解析配置 var config config.Config if err := yaml.Unmarshal(data, &config); err != nil { panic(fmt.Errorf("解析YAML失败: %w", err)) } // 构建DSN dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/toutoukan?%s", config.Database.Username, config.Database.Password, config.Database.Host, config.Database.Port, config.Database.Params, ) Dsn = dsn fmt.Println("DSN:", dsn) UserDB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal(err) } sqlDB, err := UserDB.DB() if err != nil { log.Printf("获取数据库连接池失败: %v", err) return } // 3. 配置连接池参数 sqlDB.SetMaxOpenConns(50) // 最大打开连接数(并发连接上限,根据服务器性能调整) sqlDB.SetMaxIdleConns(20) // 最大空闲连接数(保持一定空闲连接,避免频繁创建) sqlDB.SetConnMaxLifetime(30 * time.Minute) // 连接最大存活时间(防止连接过期) sqlDB.SetConnMaxIdleTime(10 * time.Minute) // 连接最大空闲时间 }