GORM 設定

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
}

SkipDefaultTransaction

GORM 執行寫入(建立/更新/刪除)作業時會在交易中執行,以確保資料一致性,您可以在初始化時停用此功能(如果不需要的話)

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

NamingStrategy

GORM 允許使用者透過覆寫預設的 NamingStrategy 來變更命名慣例,而 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_", // table name prefix, table for `User` would be `t_users`
SingularTable: true, // use singular table name, table for `User` would be `user` with this option enabled
NoLowerCase: true, // skip the snake_casing of names
NameReplacer: strings.NewReplacer("CID", "Cid"), // use name replacer to change struct/field name before convert it to db name
},
})

Logger

允許透過覆寫此選項來變更 GORM 的預設記錄器,請參閱 記錄器 以取得更多詳細資訊

NowFunc

變更在建立新時間戳時要使用的函式

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

DryRun

產生 SQL 而不會執行,可用於準備或測試產生的 SQL,請參閱 Session 以取得詳細資訊

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

PrepareStmt

PreparedStmt 在執行任何 SQL 時建立一個準備好的陳述式,並將它們快取起來以加速後續的呼叫,請參閱 Session 以取得詳細資訊

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

DisableNestedTransaction

在資料庫交易中使用 Transaction 方法時,GORM 會使用 SavePoint(savedPointName)RollbackTo(savedPointName) 來提供巢狀交易支援,您可以使用 DisableNestedTransaction 選項來停用此功能,請參閱 Session 以取得詳細資訊

AllowGlobalUpdate

啟用全域更新/刪除,請參閱 Session 以取得詳細資訊

DisableAutomaticPing

GORM 在初始化後會自動 ping 資料庫以檢查資料庫可用性,透過將其設定為 true 來停用此功能

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

DisableForeignKeyConstraintWhenMigrating

當執行 AutoMigrateCreateTable 時,GORM 會自動建立資料庫的外來鍵約束,若要停用此功能,請將其設為 true,詳細資訊請參閱 Migration

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

白金贊助商

黃金贊助商

白金贊助商

黃金贊助商