Värdet som är kopplat till nyckeln "_id" är av typen bson.ObjectId
som helt enkelt är en string .
bson.M
är en typ map[string]interface{} , så du behöver Typpåstående
för att få id:t som ett ObjectId :
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
Och ObjectId har en ObjectId.Hex()
metod som returnerar exakt vad du vill ha:objekt-id som en "ren" hex-sträng:
fmt.Println(objid.Hex())
Alternativ
objid kan helt enkelt konverteras till string eftersom dess underliggande typ är string . Så du kan använda ett antal ytterligare alternativ för att konvertera den till en hexadecimal string :
hexid := fmt.Sprintf("%x", string(objid))
Om du bara vill skriva ut det kan du göra direkt:
fmt.Printf("%x", string(objid))
Obs! Konverterar den till string är viktigt annars fmt paketet skulle anropa dess String() metod som resulterar i en sträng som ObjectIdHex("537f700b537461b70c5f0000") och det här är vad som skulle konverteras till hex, vilket helt klart inte är vad du vill ha.
Alternativt du kan använda encoding/hex
paketet och hex.EncodeToString()
funktion:
hexid := hex.EncodeToString([]byte(objid))