Hodnota spojená s klíčem "_id" je typu bson.ObjectId
což je jednoduše string .
bson.M
je typ map[string]interface{} , takže potřebujete Určení typu
získat ID jako ObjectId :
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
A ObjectId má ObjectId.Hex()
metoda, která vrátí přesně to, co chcete:ID objektu jako "čistý" hexadecimální řetězec:
fmt.Println(objid.Hex())
Alternativy
objid lze jednoduše převést na string protože jeho základní typ je string . Můžete tedy použít řadu dalších možností, jak jej převést na hexadecimální string :
hexid := fmt.Sprintf("%x", string(objid))
Pokud jej chcete pouze vytisknout, můžete to udělat přímo:
fmt.Printf("%x", string(objid))
Poznámka: Převede se na string jinak je důležitý fmt balíček by zavolal svůj String() výsledkem je řetězec jako ObjectIdHex("537f700b537461b70c5f0000") a to je to, co by bylo převedeno na hex, což zjevně není to, co chcete.
Alternativně můžete použít encoding/hex
balíček a hex.EncodeToString()
funkce:
hexid := hex.EncodeToString([]byte(objid))