模型是標準的 struct,由 Go 的基本數據類型、實現了 Scanner 和 Valuer 接口的自定義類型及其指針或別名組成
例如:
type User struct {
ID uint
Name string
Email *string
Age uint8
Birthday *time.Time
MemberNumber sql.NullString
ActivatedAt sql.NullTime
CreatedAt time.Time
UpdatedAt time.Time
}
GORM 傾向于約定,而不是配置。默認情況下,GORM 使用 ID 作為主鍵,使用結構體名的蛇形復數作為表名,字段名的蛇形作為列名,并使用 CreatedAt、UpdatedAt 字段追蹤創(chuàng)建、更新時間
遵循 GORM 已有的約定,可以減少您的配置和代碼量。如果約定不符合您的需求,GORM 允許您自定義配置它們
GORM 定義一個 gorm.Model 結構體,其包括字段 ID、CreatedAt、UpdatedAt、DeletedAt
// gorm.Model 的定義
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
你可以將它嵌入到你的結構體中,以包含這幾個字段
對于匿名字段,GORM 會將其字段包含在父結構體中,例如:
type User struct {
gorm.Model
Name string
}
// 等效于
type User struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
Name string
}
對于正常的結構體字段,你也可以通過標簽 embedded 將其嵌入,例如:
type Author struct {
Name string
Email string
}
type Blog struct {
ID int
Author Author `gorm:"embedded"`
Upvotes int32
}
// 等效于
type Blog struct {
ID int64
Name string
Email string
Upvotes int32
}
并且,您可以使用標簽 embeddedPrefix 來為 db 中的字段名添加前綴,例如:
type Blog struct {
ID int
Author Author `gorm:"embedded;embeddedPrefix:author_"`
Upvotes int32
}
// 等效于
type Blog struct {
ID int64
AuthorName string
AuthorEmail string
Upvotes int32
}
更多建議: