使用gorm向MySQL插入同时为PrimaryKey和DEFAULT的字段

时间:2017-07-11 12:57:57

标签: mysql go go-gorm

我希望有一个表,其主键是一个自动生成的时间戳(我知道它通常不是最好的主意,但在我的情况下它没关系)并且它有另一个字符串字段。这是我使用的数据结构:

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')有问题,这是在我没有完全指定的时候创建的。

有解决方法吗?

1 个答案:

答案 0 :(得分:0)

评论互动后,起草这个答案。

  

我猜测我的默认时间(' 0001-01-01 00:00:00 +0000 UTC')出现了问题完全指定它。

原因是,Go数据类型的值为零,spec和良好的读取here

对于您来说,可能的方法是使用适当的gorm callbacks在数据库交互之前或之后设置或修改结构字段。