Værdien forbundet med nøglen "_id" er af typen bson.ObjectId
som blot er en string .
bson.M
er en type map[string]interface{} , så du har brug for Typepåstand
for at få id'et som et ObjectId :
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
Og ObjectId har en ObjectId.Hex()
metode, som returnerer præcis, hvad du ønsker:objekt-id'et som en "ren" hex-streng:
fmt.Println(objid.Hex())
Alternativer
objid kan simpelthen konverteres til string fordi dens underliggende type er string . Så du kan bruge en række yderligere muligheder til at konvertere den til en hex string :
hexid := fmt.Sprintf("%x", string(objid))
Hvis du bare vil udskrive det, kan du gøre direkte:
fmt.Printf("%x", string(objid))
Bemærk: Konvertering til string er vigtig ellers fmt pakken ville kalde sin String() metode, der resulterer i en streng som ObjectIdHex("537f700b537461b70c5f0000") og det er det, der ville blive konverteret til hex, hvilket tydeligvis ikke er, hvad du ønsker.
Alternativt du kan bruge encoding/hex
pakken og hex.EncodeToString()
funktion:
hexid := hex.EncodeToString([]byte(objid))