El valor asociado con la clave "_id" es de tipo bson.ObjectId
que es simplemente una string .
bson.M
es un tipo map[string]interface{} , por lo que necesita Escriba aserción
para obtener la identificación como ObjectId :
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
Y el ObjectId tiene un ObjectId.Hex()
método que devuelve exactamente lo que desea:la identificación del objeto como una cadena hexadecimal "pura":
fmt.Println(objid.Hex())
Alternativas
objid simplemente se puede convertir a string porque su tipo subyacente es string . Por lo tanto, puede usar una serie de opciones adicionales para convertirlo en una string hexadecimal :
hexid := fmt.Sprintf("%x", string(objid))
Si solo desea imprimirlo, puede hacerlo directamente:
fmt.Printf("%x", string(objid))
string es importante si no el fmt el paquete llamaría a su String() método que da como resultado una cadena como ObjectIdHex("537f700b537461b70c5f0000") y esto es lo que se convertiría en hexadecimal, que claramente no es lo que quieres.
Alternativamente puede usar el encoding/hex
paquete y el hex.EncodeToString()
función:
hexid := hex.EncodeToString([]byte(objid))