我希望有一个表,其主键是一个自动生成的时间戳(我知道它通常不是最好的主意,但在我的情况下它没关系)并且它有另一个字符串字段。这是我使用的数据结构:
type GlobalDefault struct {
Timestamp time.Time `gorm:"primary_key" sql:"DEFAULT:current_timestamp"`
Version string `sql:"not null"`
}
当我将此数据结构与AutoMigrate一起使用时,我确实得到一个时间戳为主键的表,我甚至可以运行insert into global_defaults (version) VALUES ('1.5.3');
,并且会插入一个带有自动生成时间戳的新行。
我的问题是我无法使用gorm将记录插入此表中。我使用以下函数:
func (repository *AgentRepository)SetGlobalDefault(version string) error {
gd := GlobalDefault{ Version:version }
return repository.connection.Create(&gd).Error
}
当我打电话给它时,我收到以下错误:
收到意外错误无法将字段Timestamp的参数从int64转换为time.Time
如果我明确提供时间戳,它会起作用。我猜它在默认时间('0001-01-01 00:00:00 +0000 UTC')有问题,这是在我没有完全指定的时候创建的。
有解决方法吗?
答案 0 :(得分:0)
评论互动后,起草这个答案。
我猜测我的默认时间(' 0001-01-01 00:00:00 +0000 UTC')出现了问题完全指定它。
原因是,Go数据类型的值为零,spec和良好的读取here。
对于您来说,可能的方法是使用适当的gorm callbacks在数据库交互之前或之后设置或修改结构字段。