2

ここで何が起こっているのかわかりません... しかし、簡単な操作を実行しようとして、かなりの時間を費やしています。私はGO(ノードから切り替えようとしている)が初めてなので、おそらくタイプの問題です...

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"`
    }
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)
  err := user.FindId(a.ID_)
  if err != nil {
    panic(err)
  }
}

これにより、次のエラーが返されます

http: panic serving [::1]:53092: &{{0 0} 0xc208062600 {{0.user [{_id TE?????}] 0 0 ?
reflect.Value? 0 <nil> {?reflect.Value? ?reflect.Value? ?reflect.Value? false false [] 0}     
false []} 0.25 0}}

私が実行すると:

a.ID_.Valid()

私は「真実」を取得します。

PS。これを機能させることができます:

func user(w http.ResponseWriter, r *http.Request) {
  m := s.Copy()
  defer m.Close()
  user := m.DB("0").C("user")
  a := &User{ID_:bson.NewObjectId(), UTC:time.Now()}
  b, _ := json.Marshal(a)
  user.Insert(a)
}

どんな助けでも本当に感謝しています。

4

2 に答える 2

3

ドキュメントに従ってhttp://godoc.org/labix.org/v2/mgo#Collection.FindId

FindId構造体を返し、Queryその関数のいずれかを呼び出すことができます。FindIdエラーを返しません。

試す

var userDoc interface{}
if err := user.FindId(a.ID_).One(&userDoc); err != nil {
  panic(err)
}

ユーザーに使用している構造体を変更できinterface{}ます。

于 2014-10-21T01:14:10.840 に答える