Il valore associato alla chiave "_id" è di tipo bson.ObjectId
che è semplicemente una string .
bson.M
è un tipo map[string]interface{} , quindi hai bisogno di Digita l'asserzione
per ottenere l'ID come ObjectId :
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
E il ObjectId ha un ObjectId.Hex()
metodo che restituisce esattamente quello che vuoi:l'id oggetto come stringa esadecimale "pura":
fmt.Println(objid.Hex())
Alternative
objid può essere semplicemente convertito in string perché il suo tipo sottostante è string . Quindi puoi utilizzare una serie di ulteriori opzioni per convertirlo in una string esadecimale :
hexid := fmt.Sprintf("%x", string(objid))
Se vuoi solo stamparlo, puoi farlo direttamente:
fmt.Printf("%x", string(objid))
Nota: Convertindolo in string è importante altrimenti il fmt il pacchetto chiamerebbe il suo String() metodo che risulta in una stringa come ObjectIdHex("537f700b537461b70c5f0000") e questo è ciò che verrebbe convertito in esadecimale che chiaramente non è quello che vuoi.
In alternativa puoi usare encoding/hex
pacchetto e il hex.EncodeToString()
funzione:
hexid := hex.EncodeToString([]byte(objid))