Go 时间。空的时候时间不会忽略

Go 时间。空的时候时间不会忽略,go,mgo,Go,Mgo,这是我读过的一个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:

这是我读过的一个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)
}
当我在struct定义中有time.time时,我会得到一个零日期值,这会将Mongo文档中的日期重置回UNIX start。当我使用*time.time时,我得到一个nil date值,它将完全从我的Mongo文档中删除我的日期字段。代码如下:

有没有办法让这一切顺利进行?我不希望每次调用都创建一个新的结构——最好是重用我的用户结构,它本质上就是我的DB集合模式

当前状态:


一些很棒的评论和解决方案,谢谢大家。然而,我仍然对省略empty的不一致行为感到困惑。当它是一个字符串&&empty时,它实际上从结构后期解码中被省略。但是,如果是time.time/bson.ObjectId,则为空时为零;如果是*time.time/*bson.ObjectId,则为空时为零。如果它们真的被省略了,那就太好了。然后,我们可以一遍又一遍地重用该结构,而无需超显式—这基本上是绕过这些零/零值的额外工作

这并不是在回答你的问题。。但是您是否考虑过对这两个字段执行手动更新,而不是使用一揽子更新API UpdateId?来澄清。。我的意思是类似user.Updatebson.M{ObjectId:a.ID_},bson.M{$set:bson.M{usr:a.usr,pwd:a.pwd}的东西感谢您的洞察力。这是可行的,但如此明确的工作几乎与定义一个新结构一样多。我希望所有关于“类型”的大惊小怪都能得到回报-我来自一个节点,这里所有的东西都是简单模式。。。i、 JSON是本机的。。。虽然,我不得不说。。。我喜欢能够再次编写for循环而不是async.blah.blah.blah。这个问题也使这个调用变得复杂:user.Finda.Selectbson.M{u id:1}.One&b。在理想情况下,我可以选择a,b用户。。。零时间或零时间。时间会妨碍我,所以我必须为那个调用创建一个临时结构…但这并不是一件真正的事情。。。这更像是蒙哥人的事。更新将替换文档。。。除非指定$set。可能有一种方法可以使用mgo驱动程序,它会为您使用$set。我去看看。