1

golang使用gorm操作mysql数据表时,经常需要自动设置创建和修改时间

以下几种方式

1.使用默认支持字段

    CreatedAt  time.Time `gorm:"column:created_at;" json:"created_at"` // 创建时间
    UpdatedAt  time.Time `gorm:"column:updated_at" json:"updated_at"`  // 更新时间

这是官方文档说明:

GORM 约定使用 CreatedAtUpdatedAt 追踪创建/更新时间。如果您定义了这种字段,GORM 在创建、更新时会自动填充当前时间

2.自定义字段

使用 autoCreateTimeautoUpdateTime 标签

    Created     time.Time `gorm:"column:created;autoCreateTime" json:"created"`
    Updated    time.Time `gorm:"column:updated;autoUpdateTime" json:"updated"` // 更新时间

3.设置写入权限

数据库设置 CURRENT_TIMESTAMP

  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

结构体添加不可写权限 <-:false

CreatedAt  time.Time `gorm:"column:created_at;<-:false" json:"created_at"` // 创建时间
UpdatedAt  time.Time `gorm:"column:updated_at;<-:false" json:"updated_at"` // 更新时间

4.使用 GORM 内置的gorm.Model结构体[不太推荐,不方便设置标签信息]

// gorm.Model 定义 
type Model struct { 
    ID uint `gorm:"primary_key"` 
    CreatedAt time.Time 
    UpdatedAt time.Time
    DeletedAt *time.Time
}
type User struct { 
    gorm.Model 
    Name string 
}

这是官方文档说明:

  • 将其嵌入在您的结构体中: 您可以直接在您的结构体中嵌入 gorm.Model ,以便自动包含这些字段。 这对于在不同模型之间保持一致性并利用GORM内置的约定非常有用,请参考嵌入结构
    • 包含的字段
-   `ID` :每个记录的唯一标识符(主键)。
-   `CreatedAt` :在创建记录时自动设置为当前时间。
-   `UpdatedAt`:每当记录更新时,自动更新为当前时间。
-   `DeletedAt`:用于软删除(将记录标记为已删除,而实际上并未从数据库中删除)。

注意:初始化结构数据时,不要设置值

附:gorm字段标签


xue1995
4 声望1 粉丝