Config
是 GORM 提供的一个结构体,它包含了一些配置选项,可以在初始化时使用。下面是 Config
结构体中的一些常用配置选项:
SkipDefaultTransaction
:为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。如果没有这方面的要求,您可以在初始化时禁用它。NamingStrategy
:GORM 允许用户通过覆盖默认的命名策略来更改命名约定。Logger
:允许通过覆盖此选项更改 GORM 的默认 logger。NowFunc
:更改创建时间使用的函数。DryRun
:生成 SQL 但不执行,可以用于准备或测试生成的 SQL。PrepareStmt
:在执行任何 SQL 时都会创建一个 prepared statement 并将其缓存,以提高后续的效率。AllowGlobalUpdate
:启用全局 update/delete。
下面是一个简单的示例,演示如何在初始化时使用 Config
结构体:
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ SkipDefaultTransaction: true, NamingStrategy: schema.NamingStrategy{ TablePrefix: "t_", SingularTable: true, }, Logger: logger.Default.LogMode(logger.Info), NowFunc: func() time.Time { return time.Now().Local() }, DryRun: false, PrepareStmt: false, AllowGlobalUpdate: false, })
自定义NamingStrategy
GORM 允许用户通过覆盖默认的命名策略来更改命名约定。默认的命名策略提供了一些选项,例如设置表名前缀或使用单数表名。下面是一个如何覆盖默认命名策略并使用一些选项的示例 :
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ NamingStrategy: schema.NamingStrategy{ TablePrefix: "t_", // 表名前缀,`User` 的表名将为 `t_users` SingularTable: true, // 使用单数表名,启用此选项后,`User` 的表名将为 `user` }, })
自定义Logger
GORM 具有默认的日志记录器实现,它默认会打印慢 SQL 和发生的错误。日志记录器接受一些选项,您可以在初始化时自定义它。例如 :
newLogger := logger.New( log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer logger.Config{ SlowThreshold: time.Second, // 慢 SQL 阈值 LogLevel: logger.Silent, // 日志级别 IgnoreRecordNotFoundError: true, // 忽略 ErrRecordNotFound 错误 Colorful: false, // 禁用颜色 }, ) db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{ Logger: newLogger, })
自定义NowFunc
GORM 允许您更改创建新时间戳时使用的函数。您可以在初始化时使用 NowFunc 选项进行更改。例如 :
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ NowFunc: func() time.Time { return time.Now().Local() }, })