我使用mgo(gopkg.in/mgo.v2)软件包使用MongoDB v3.6.4
Bson
var id interface{}
id = 249678041972736
bson.M{"_id": id}
var id int64
id = 249678041972736
bson.M{"_id": id}
两个人不一样吗? 例如:
func GetUser(id interface{}) (*User, error) {
session := MongoDB()
defer session.Close()
var m *User
err := session.DB.C("user").Find(&bson.M{"_id": id}).One(&m)
// !!!err: not found
if err != nil {
return nil, err
} else {
return m, nil
}
}
但是:
func GetUser(id int64) (*User, error) {
session := MongoDB()
defer session.Close()
var m *User
err := session.DB.C("user").Find(&bson.M{"_id": id}).One(&m)
// !!! err == nil
if err != nil {
return nil, err
} else {
return m, nil
}
}
GetUser(id interface{}) can get err (not found)
GetUser(id int64) can get nil err
注意错误
我使用了函数GetUser并导入了相同的值249678041972736 但不同的参数类型得到不同的结果
为什么???
答案 0 :(得分:0)
你正在放一个不必要的&在bson.M {...
前面err := session.DB.C("user").FindId(id).One(&m)
在查找中使用bson.M也是不必要的,mgo专门针对您正在进行的搜索调用FindId。
{{1}}
gopkg.in/mgo.v2现在标记为未维护。 github.com/globalsign/mgo和github.com/globalsign/mgo/bson是两个维护的分叉库。我发现使用它们没有问题,而不是pf gopkg.in