我在基于类型time.Time创建自己的类型Date时遇到一些问题我试图创建Date类型,如下所示:type Date time.Timefunc (d Date) UnmarshalJSON(buf []byte) error { var s string json.Unmarshal(buf, &s) t, err := time.Parse(timeLayout,s) d= Date(t) return err}func (d Date) MarshalJSON() ([]byte, error) { b,_ := json.Marshal(d.Format(timeLayout)) return b,nil}这本身有效,我可以将此Date作为time.Time存储在AppEngine数据存储区中。封送处理本身也可以,但是不起作用是:然后从json解组时,Date d会填充该值。据我所知,这是正确的,因为unmarshalJson函数创建了Date的副本。因此,当我将unmarshalJson函数更改为使用指向日期的指针时,便无法使用:d=Date(t)所以第一个问题,是否有解决方案?我现在要做的是重写代码,如下所示:type Date struct { t time.Time}func (d *Date) UnmarshalJSON(buf []byte) error { var s string json.Unmarshal(buf, &s) t, err := time.Parse(timeLayout,s) d.t = t return err}func (d Date) MarshalJSON() ([]byte, error) { b,_ := json.Marshal(d.t.Format(timeLayout)) return b,nil}这是可行的,但在这种情况下,Date不是时间的扩展类型.Time仅是time.Time类型的包装。有更好的解决方案吗?我仍然很新。我需要此Date类型,以具有仅Date json格式的类型,因为Chrome仅支持html5类型:date而不是datetime。和方法覆盖不可能(去覆盖类型time.Time的un / marshalJson方法)?
1 回答
- 1 回答
- 0 关注
- 185 浏览
添加回答
举报
0/150
提交
取消