mongoDB Golang Bson界面有问题吗?

I uesd MongoDB v3.6.4 with mgo(gopkg.in/mgo.v2) package

Bson

var id interface{}  
id = 249678041972736  
bson.M{"_id": id}  
var id int64  
id = 249678041972736  
bson.M{"_id": id}

Tow bsons are not same?
eg:

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  
    }
}  

but:

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 

Pay attention to error

I used function GetUser and import same value 249678041972736 but different parameter type get differents result

why???

You are putting an unnecessary & in front of the bson.M{…

err := session.DB.C("user").Find(bson.M{"_id": id}).One(&m)

The use of bson.M in the find is also unnecessary, mgo has a call of FindId specifically for the search you are doing.

err := session.DB.C("user").FindId(id).One(&m)

gopkg.in/mgo.v2 is now marked as unmaintained. github.com/globalsign/mgo and github.com/globalsign/mgo/bson are the two maintained forked libraries. I have found no problems using them instead pf gopkg.in