我正在处理一个要求,其中我收到一个 JSON 对象,其中包含一个字符串形式的日期值。我的任务是将 Date 对象存储在数据库中。
类似这样的事情:
{"start_date": "2019-05-29", "end_date": "2019-08-30"}
{"start_date": "2019-05-29", "end_date": null}
我已经实现了自定义Date类型
type Date struct {
time.Time
}
我已经实现了 UnmarshalJSON 接口
func (d *Date) UnmarshalJSON(b []byte) (err error) {
if b[0] == '"' && b[len(b)-1] == '"' {
b = b[1 : len(b)-1]
}
// take care of null..
if len(b) == 0 || string(b) == "null" {
d.Time = time.Time{}
return
}
d.Time, err = time.Parse("2006-01-02", string(b))
return
}
还实现了 Valuer 接口以将 Value 返回给 sql.Driver。
func (d Date) Value() (driver.Value, error) {
// check if the date was not set..
if d.Time.IsZero() {
return nil, nil
}
return d.Time.Format("2006-01-02"), nil
}
但由于某种原因,直到Date 实现 Scanner 接口,就像这样:
func (d Date) Scan(b interface{}) (err error) {
...
return
}
问题:
ORM 适配器 (GORM) 不会将记录存储在数据库中。有什么线索吗?
如果我运行上面的代码 2 两次,我会看到不同的行为,具体取决于 Scan() 函数是否存在。
素胚勾勒不出你
慕容708150
相关分类