De waarde die is gekoppeld aan sleutel "_id" is van het type bson.ObjectId
dat is gewoon een string .
bson.M
is een type map[string]interface{} , dus je hebt Typebevestiging
nodig om de id te krijgen als een ObjectId :
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
En de ObjectId heeft een ObjectId.Hex()
methode die precies teruggeeft wat je wilt:het object-ID als een "pure" hexadecimale tekenreeks:
fmt.Println(objid.Hex())
Alternatieven
objid kan eenvoudig worden geconverteerd naar string omdat het onderliggende type string . is . Je kunt dus nog een aantal andere opties gebruiken om het om te zetten in een hex string :
hexid := fmt.Sprintf("%x", string(objid))
Als u het alleen wilt afdrukken, kunt u direct het volgende doen:
fmt.Printf("%x", string(objid))
Opmerking: Converteren naar string is belangrijk anders is de fmt pakket zou zijn String() . aanroepen methode die resulteert in een string zoals ObjectIdHex("537f700b537461b70c5f0000") en dit is wat zou worden omgezet in hex, wat duidelijk niet is wat je wilt.
Alternatief je kunt de encoding/hex gebruiken
pakket en de hex.EncodeToString()
functie:
hexid := hex.EncodeToString([]byte(objid))