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