这是我读过的一个BUG,想知道是否有人对我的用例有特别的建议,因为我不确定它什么时候会被修复(最后我读了1.4)。
我正在将JSON解码为以下结构:
User struct {
ID_ bson.ObjectId `bson:"_id,omitempty" json:"_id,omitempty"`
UTC *time.Time `bson:"utc,omitempty" json:"utc,omitempty"`
USR string `bson:"usr,omitempty" json:"usr,omitempty"`
PWD string `bson:"pwd,omitempty" json:"pwd,omitempty"`
}
然后使用MGO更新USR和PWD字段:
func save(w http.ResponseWriter, r *http.Request) {
m := s.Copy()
defer m.Close()
user := m.DB("0").C("user")
var a User
json.NewDecoder(r.Body).Decode(&a)
b := &User {USR:a.USR, PWD:a.PWD}
user.UpdateId(a.ID_, b)
}
当我有时间。结构定义中的时间,我得到一个零日期值,这会将我在Mongo Doc中的日期重置回UNIX启动。当我使用* time.Time时,我得到一个零日期值,它完全从我的Mongo Doc中删除了我的日期字段。这是代码:
任何想法如何使这项工作?我宁愿不为每个调用创建一个新结构 - 基本上重用我的User结构(基本上是我的数据库集合模式)很好。
当前状态:
一些好的评论和解决方案,谢谢大家。但是,我仍然对“omitempty”的不一致行为感到困惑。当它是一个字符串&&将它从struct post Decode中真正省略。但是,当它是一个时间时.Time / bson.ObjectId它在空时被归零OR * time.Time / * bson.ObjectId它为空时为零。如果真的省略它们真的很好。然后我们可以一遍又一遍地重用结构(不需要超显式 - 这基本上是额外的工作来绕过那些零/归零值)。