Files

40 lines
1.0 KiB
Go
Raw Permalink Normal View History

2026-08-14 13:17:03 +08:00
// Package database 负责数据库连接初始化与 GORM 实例管理
package database
import (
"fmt"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"nl-game-api-gin/internal/config"
)
// DB 全局数据库实例Init 成功后可直接使用
var DB *gorm.DB
// Init 连接 MySQL 并配置连接池
func Init() error {
db, err := gorm.Open(mysql.Open(config.C.DSN()), &gorm.Config{
// 只打印慢查询与错误 SQL避免日志刷屏
Logger: logger.Default.LogMode(logger.Warn),
// dev 自动建表时不生成物理外键约束,与 sql/init.sql 的手写表结构保持一致
DisableForeignKeyConstraintWhenMigrating: true,
})
if err != nil {
return fmt.Errorf("连接 MySQL 失败: %w", err)
}
sqlDB, err := db.DB()
if err != nil {
return fmt.Errorf("获取底层连接池失败: %w", err)
}
// 连接池参数:空闲 10、最大 100、连接最长存活 1 小时
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
sqlDB.SetConnMaxLifetime(time.Hour)
DB = db
return nil
}