InfoSphere/GORM 中文版/ 返回书籍
Advanced Topics

GORM 配置

qianmoQqianmoQ· 更新于 2026-09-16· 阅读 8 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

GORM 提供了可在初始化时使用的配置选项

type Config struct {
  SkipDefaultTransaction   bool
  NamingStrategy           schema.Namer
  Logger                   logger.Interface
  NowFunc                  func() time.Time
  DryRun                   bool
  PrepareStmt              bool
  DisableNestedTransaction bool
  AllowGlobalUpdate        bool
  DisableAutomaticPing     bool
  DisableForeignKeyConstraintWhenMigrating bool
}

跳过默认事务

GORM 在执行写入操作(创建/更新/删除)时会在事务中运行以确保数据一致性,若无需此特性可在初始化时禁用

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  SkipDefaultTransaction: true,
})

命名策略

GORM 允许用户通过覆盖默认的 NamingStrategy 来修改命名约定,该策略需实现 Namer 接口

type Namer interface {
  TableName(table string) string
  SchemaName(table string) string
  ColumnName(table, column string) string
  JoinTableName(table string) string
  RelationshipFKName(Relationship) string
  CheckerName(table, column string) string
  IndexName(table, column string) string
}

默认的 NamingStrategy 也提供了一些可选配置,例如:

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  NamingStrategy: schema.NamingStrategy{
    TablePrefix: "t_",   
    SingularTable: true, 
    NoLowerCase: true, 
    NameReplacer: strings.NewReplacer("CID", "Cid"), 
  },
})

日志记录器

通过覆盖此选项可更改 GORM 的默认日志记录器,详情请参考 Logger 文档

时间函数

修改创建新时间戳时使用的函数

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  NowFunc: func() time.Time {
    return time.Now().Local()
  },
})

空运行模式

生成 SQL 但不执行,可用于准备或测试生成的 SQL 语句,详情请参考 Session 文档

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  DryRun: false,
})

预编译语句

PreparedStmt 会在执行任何 SQL 时创建预编译语句并缓存以加速后续调用,详情请参考 Session 文档

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  PrepareStmt: false,
})

禁用嵌套事务

在数据库事务内使用 Transaction 方法时,GORM 会通过 SavePoint(savedPointName)RollbackTo(savedPointName) 提供嵌套事务支持,可通过 DisableNestedTransaction 选项禁用此功能,详情请参考 Session 文档

允许全局更新

启用全局更新/删除操作,详情请参考 Session 文档

禁用自动连接检测

GORM 初始化后会自动 ping 数据库以检查可用性,设置为 true 可禁用此功能

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  DisableAutomaticPing: true,
})

迁移时禁用外键约束

GORM 在执行 AutoMigrateCreateTable 时会自动创建数据库外键约束,设置为 true 可禁用此行为,详情请参考 Migration 文档

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  DisableForeignKeyConstraintWhenMigrating: true,
})

GitHub tag (latest SemVer)

评论

登录后参与评论

正在加载评论…