2 回答
TA贡献1827条经验 获得超8个赞
我终于明白了。
有几个问题:
1-MarshalJSONand UnmarshalJSON仅适用于数据库交互之前和之后
2-结构table定义没有正确的gorm定义:
type tablestruct {
ID int64 `gorm:"primary_key;auto_increment"json:"id"`
CreatedAt timeLib.JSONTime `gorm:"type:timestamp;default:current_timestamp"json:"createdAt"`
UpdatedAt timeLib.JSONTime `gorm:"type:timestamp;default:current_timestamp ON update current_timestamp"json:"updatedAt"`
}
3-由于 typeJSONTime是一个新类型,驱动程序不知道如何转换它,所以我们需要重写Value:
func (jsonTime JSONTime) Value() (driver.Value, error) {
return time.Time(jsonTime), nil
}
4-最后我们需要重写Scan以便将数据库值转换为JSONTime值
func (jsonTime *JSONTime) Scan(value interface{}) error {
if value == nil {
*jsonTime = JSONTime(time.Now())
return nil
}
if readTime, err := driver.DefaultParameterConverter.ConvertValue(value); err == nil {
if convertedTime, ok := readTime.(time.Time); ok {
*jsonTime = JSONTime(convertedTime)
return nil
}
}
return errors.New("failed to scan TIME")
}
TA贡献1864条经验 获得超2个赞
尝试一下
type JSONTime struct {
time.Time
}
type BaseModel struct {
ID uint `gorm:"autoIncrement;primary_key" json:"id"`
CreatedAt JSONTime `gorm:"type:timestamp;default:current_timestamp" json:"created_at"`
UpdatedAt JSONTime `gorm:"type:timestamp;default:current_timestamp" json:"updated_at"`
DeletedAt JSONTime `gorm:"type:timestamp;default:current_timestamp" json:"deleted_at"`
}
- 2 回答
- 0 关注
- 93 浏览
添加回答
举报