Files
trading_assistant/trading_assistant_api/common/db/options.go
2026-02-06 16:44:33 +08:00

112 lines
3.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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
}
}