与键关联的值"_id"
属于类型bson.ObjectId https://godoc.org/gopkg.in/mgo.v2/bson#ObjectId这只是一个string
.
bson.M https://godoc.org/gopkg.in/mgo.v2/bson#M是一种类型map[string]interface{}
,所以你需要类型断言 http://golang.org/ref/spec#Type_assertions获取 id 作为ObjectId
:
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
And the ObjectId
has a ObjectId.Hex() http://godoc.org/gopkg.in/mgo.v2/bson#ObjectId.Hex方法返回您想要的内容:对象 ID 作为“纯”十六进制字符串:
fmt.Println(objid.Hex())
备择方案
objid
可以简单地转换为string
因为它的底层类型是string
。因此,您可以使用许多其他选项将其转换为十六进制string
:
hexid := fmt.Sprintf("%x", string(objid))
如果你只想打印,可以直接执行:
fmt.Printf("%x", string(objid))
Note:将其转换为string
很重要,否则fmt
包会调用它的String()
方法会产生类似的字符串ObjectIdHex("537f700b537461b70c5f0000")
这就是将转换为十六进制的内容,这显然不是您想要的。
或者你可以使用encoding/hex http://golang.org/pkg/encoding/hex/包和hex.EncodeToString() http://golang.org/pkg/encoding/hex/#EncodeToString功能:
hexid := hex.EncodeToString([]byte(objid))