Files
workspace/code/base-project/base-go-v3/db/db.go
T
2025-11-23 22:43:57 +08:00

57 lines
1.2 KiB
Go

package db
import (
"cn/oneao/base-go/config"
"cn/oneao/base-go/ent"
"database/sql"
"fmt"
"log"
"entgo.io/ent/dialect"
entsql "entgo.io/ent/dialect/sql"
_ "github.com/lib/pq"
)
var Client *ent.Client
// InitDB 初始化 PostgreSQL 数据库连接(使用 sql.DB 配置连接池)
func InitDB() {
// 处理 SSLMode
sslmode := "disable"
if config.Db.SllMode {
sslmode = "require"
}
// 构建 PostgreSQL DSN
dsn := fmt.Sprintf(
"user=%s password=%s dbname=%s host=%s port=%d sslmode=%s TimeZone=%s",
config.Db.User,
config.Db.Password,
config.Db.Dbname,
config.Db.Host,
config.Db.Port,
sslmode,
config.Db.TimeZone,
)
// 使用 sql.Open 创建原生 *sql.DB 对象
db, err := sql.Open("postgres", dsn)
if err != nil {
log.Fatalf("❌ 数据库连接失败: %v", err)
}
// 配置连接池
db.SetMaxOpenConns(config.Db.MaxOpenConns)
db.SetMaxIdleConns(config.Db.MaxIdleConns)
db.SetConnMaxLifetime(config.Db.ConnMaxLifetime)
// 使用 sql.DB 创建 ent.Driver
drv := entsql.OpenDB(dialect.Postgres, db)
// 创建 ent.Client
client := ent.NewClient(ent.Driver(drv))
Client = client
log.Println("✅ 数据库连接完成")
}