在 Go 语言中配置 GORM(一个流行的 ORM 库)通常涉及以下核心配置项和示例代码。以下是详细说明:
1. 基本连接配置
以 MySQL 为例,初始化 GORM 连接:
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func InitDB() (*gorm.DB, error) {
// MySQL DSN 格式: [username[:password]@][protocol[(address)]]/dbname[?param1=value1&...]
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
// 常用配置项见下文
})
return db, err
}
2. 关键配置项 (gorm.Config
)
type Config struct {
SkipDefaultTransaction bool // 禁用默认事务(提升性能)
NamingStrategy schema.Namer // 命名策略(表名、列名规则)
Logger logger.Interface // 自定义日志
NowFunc func() time.Time // 覆盖时间生成函数
PrepareStmt bool // 预编译 SQL(加速重复查询)
DisableAutomaticPing bool // 禁用自动 Ping 数据库
DisableForeignKeyConstraintWhenMigrating bool // 迁移时禁用外键约束
}
常用配置示例:
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
SkipDefaultTransaction: true,
PrepareStmt: true, // 开启预编译
NamingStrategy: schema.NamingStrategy{
TablePrefix: "t_", // 表前缀
SingularTable: true, // 使用单数表名(如 user 而非 users)
},
})
3.连接池配置
通过底层 *sql.DB
调整连接池:
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(10) // 空闲连接数
sqlDB.SetMaxOpenConns(100) // 最大打开连接数
sqlDB.SetConnMaxLifetime(time.Hour) // 连接最大存活时间
4.日志配置
启用详细日志:
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info), // Info/Silent/Warn/Error
})
自定义日志输出:
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags),
logger.Config{
SlowThreshold: time.Second,
LogLevel: logger.Warn,
},
)
db.Config.Logger = newLogger
5.高级选项
- 自定义数据类型:实现
Scanner
和Valuer
接口。 - 插件:使用 GORM插件(如多租户、加密字段等)。
- 读写分离:通过
Dialector
配置多个数据源。
6.配置文件 (YAML/JSON)
若需从文件加载配置,可结合 Viper等库:
# config.yaml
database:
dsn: "user:pass@tcp(localhost:3306)/db"
max_conns:100
idle_conns:10
解析代码略。
如需更具体的场景配置或问题排查,请提供详细信息!
内容由零声教学AI助手提供,问题来源于学员提问