add
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
// common/db/options.go
|
||||
package db
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// PostgresOptions PostgreSQL连接配置项
|
||||
// 包含基础连接信息+连接池配置,按需暴露,无冗余
|
||||
type PostgresOptions struct {
|
||||
Host string // 数据库地址
|
||||
Port string // 数据库端口
|
||||
User string // 数据库账号
|
||||
Password string // 数据库密码
|
||||
DBName string // 数据库名
|
||||
SSLMode string // SSL模式(开发环境一般disable,生产可enable)
|
||||
TimeZone string // 时区(如Asia/Shanghai)
|
||||
// 连接池配置
|
||||
MaxOpenConns int // 最大打开连接数
|
||||
MaxIdleConns int // 最大空闲连接数
|
||||
ConnMaxLifetime time.Duration // 连接最大生命周期
|
||||
ConnMaxIdleTime time.Duration // 连接最大空闲时间
|
||||
// GORM配置
|
||||
LogLevel gorm.LogLevel // GORM日志级别(开发:Info,生产:Error)
|
||||
}
|
||||
|
||||
// PostgresOption 选项模式函数类型
|
||||
type PostgresOption func(*PostgresOptions)
|
||||
|
||||
// 初始化默认配置,避免用户传参不全导致连接失败
|
||||
// 开发环境常用默认值,生产环境通过业务层传参覆盖
|
||||
func defaultPostgresOptions() *PostgresOptions {
|
||||
return &PostgresOptions{
|
||||
Host: "postgres", // 默认匹配根目录Compose的服务名,开发环境直接用
|
||||
Port: "5432",
|
||||
SSLMode: "disable",
|
||||
TimeZone: "Asia/Shanghai",
|
||||
MaxOpenConns: 20,
|
||||
MaxIdleConns: 10,
|
||||
ConnMaxLifetime: 30 * time.Minute,
|
||||
ConnMaxIdleTime: 10 * time.Minute,
|
||||
LogLevel: gorm.LogLevelInfo, // 开发环境默认打印Info日志
|
||||
}
|
||||
}
|
||||
|
||||
// 以下为配置项的设置函数,用户可通过链式调用配置
|
||||
// 示例:db.WithHost("192.168.1.100").WithUser("prod_user")
|
||||
|
||||
// WithHost 设置数据库地址
|
||||
func WithHost(host string) PostgresOption {
|
||||
return func(o *PostgresOptions) {
|
||||
o.Host = host
|
||||
}
|
||||
}
|
||||
|
||||
// WithPort 设置数据库端口
|
||||
func WithPort(port string) PostgresOption {
|
||||
return func(o *PostgresOptions) {
|
||||
o.Port = port
|
||||
}
|
||||
}
|
||||
|
||||
// WithUser 设置数据库账号
|
||||
func WithUser(user string) PostgresOption {
|
||||
return func(o *PostgresOptions) {
|
||||
o.User = user
|
||||
}
|
||||
}
|
||||
|
||||
// WithPassword 设置数据库密码
|
||||
func WithPassword(pwd string) PostgresOption {
|
||||
return func(o *PostgresOptions) {
|
||||
o.Password = pwd
|
||||
}
|
||||
}
|
||||
|
||||
// WithDBName 设置数据库名
|
||||
func WithDBName(dbName string) PostgresOption {
|
||||
return func(o *PostgresOptions) {
|
||||
o.DBName = dbName
|
||||
}
|
||||
}
|
||||
|
||||
// WithSSLMode 设置SSL模式
|
||||
func WithSSLMode(mode string) PostgresOption {
|
||||
return func(o *PostgresOptions) {
|
||||
o.SSLMode = mode
|
||||
}
|
||||
}
|
||||
|
||||
// WithTimeZone 设置时区
|
||||
func WithTimeZone(tz string) PostgresOption {
|
||||
return func(o *PostgresOptions) {
|
||||
o.TimeZone = tz
|
||||
}
|
||||
}
|
||||
|
||||
// WithMaxOpenConns 设置最大打开连接数
|
||||
func WithMaxOpenConns(num int) PostgresOption {
|
||||
return func(o *PostgresOptions) {
|
||||
o.MaxOpenConns = num
|
||||
}
|
||||
}
|
||||
|
||||
// WithLogLevel 设置GORM日志级别
|
||||
func WithLogLevel(level gorm.LogLevel) PostgresOption {
|
||||
return func(o *PostgresOptions) {
|
||||
o.LogLevel = level
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user