1 回答

TA贡献1876条经验 获得超6个赞
与 key 关联的值"_id"的类型bson.ObjectId只是 a string。
bson.M是一个类型map[string]interface{},所以你需要类型断言来获取 id 作为一个ObjectId:
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
并且ObjectId有一个ObjectId.Hex()方法可以准确返回您想要的内容:对象 id 作为“纯”十六进制字符串:
fmt.Println(objid.Hex())
备择方案
objid可以简单地转换为 ,string因为它的基础类型是string. 因此,您可以使用许多其他选项将其转换为十六进制string:
hexid := fmt.Sprintf("%x", string(objid))
如果只是想打印,可以直接执行:
fmt.Printf("%x", string(objid))
注意:将它转换为string很重要,否则fmt包会调用它的String()方法,结果是一个字符串ObjectIdHex("537f700b537461b70c5f0000"),这就是将被转换为十六进制的内容,这显然不是你想要的。
或者,您可以使用encoding/hex包和hex.EncodeToString()函数:
hexid := hex.EncodeToString([]byte(objid))
- 1 回答
- 0 关注
- 307 浏览
添加回答
举报