Files
EnGin/internal/db/db.go
T
2026-07-07 16:39:54 +08:00

44 lines
896 B
Go

package db
import (
"database/sql"
"fmt"
"time"
"ent-scaffold/internal/ent"
entsql "entgo.io/ent/dialect/sql"
_ "github.com/go-sql-driver/mysql" // MySQL 驱动
_ "github.com/lib/pq" // PostgreSQL 驱动
)
// Client 跨包调用的统一数据库客户端实例
var Client *ent.Client
// Init 根据配置初始化数据库连接
func Init(driver string, dsn string) error {
// 先创建标准 sql.DB 以配置连接池
db, err := sql.Open(driver, dsn)
if err != nil {
return fmt.Errorf("打开数据库连接失败 [%s]: %w", driver, err)
}
// 连接池设置
db.SetMaxIdleConns(10)
db.SetMaxOpenConns(100)
db.SetConnMaxLifetime(time.Hour)
// 将 sql.DB 包装为 ent 客户端
drv := entsql.OpenDB(driver, db)
Client = ent.NewClient(ent.Driver(drv))
return nil
}
// Close 关闭数据库连接
func Close() {
if Client != nil {
Client.Close()
}
}