在 Go 语言中使用 GORM 操作 MySQL 数据库时,CreatedAt
是 GORM 提供的一个内置模型(Model)字段,用于自动记录记录的创建时间。以下是详细说明和用法示例:
1. CreatedAt
的作用
- 自动填充时间:当创建一条新记录时,GORM 会自动将当前时间赋值给
CreatedAt
字段。 - 约定优于配置:默认情况下,GORM 会识别名为
CreatedAt
和UpdatedAt
的字段,并自动管理它们。
2. 定义模型(含 CreatedAt
)
import (
"gorm.io/gorm"
"time"
)
type User struct {
gorm.Model // 内嵌 gorm.Model,包含 ID、CreatedAt、UpdatedAt、DeletedAt
Name string
}
// 或者显式定义 CreatedAt
type Product struct {
ID uint `gorm:"primaryKey"`
Name string
CreatedAt time.Time // 手动声明 CreatedAt
}
3. 插入数据时的行为
// 插入新记录时无需手动设置 CreatedAt
user := User{Name: "Alice"}
db.Create(&user) // CreatedAt 会自动设置为当前时间
product := Product{Name: "Laptop"}
db.Create(&product) // CreatedAt 也会自动填充
4. 自定义字段名或行为
如果不想使用默认的 CreatedAt
,可以通过标签自定义:
type CustomModel struct {
CreateTime time.Time `gorm:"autoCreateTime"` // autoCreateTime: 创建时自动填充时间
}
5. FAQ
问题1:为什么我的
CreatedAt
没有自动填充?
答:确保字段名拼写正确(区分大小写),或检查是否禁用了 GORM 的钩子(Hook)。问题2:如何禁用自动时间戳?
答:在连接 MySQL 时配置:
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
DisableAutomaticPing: true,
})
如果需要进一步探讨 GORM/MySQL/Go ,可以继续提问!
内容由零声教学AI助手提供,问题来源于学员提问