Der dem Schlüssel "_id" zugeordnete Wert ist vom Typ bson.ObjectId
das ist einfach ein string .
bson.M
ist ein Typ map[string]interface{} , also brauchen Sie Typzusicherung
um die ID als ObjectId zu erhalten :
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
Und die ObjectId hat eine ObjectId.Hex()
Methode, die genau das zurückgibt, was Sie wollen:die Objekt-ID als "reinen" Hex-String:
fmt.Println(objid.Hex())
Alternativen
objid kann einfach in string umgewandelt werden weil sein zugrunde liegender Typ string ist . Sie können also eine Reihe weiterer Optionen verwenden, um ihn in einen hexadezimalen string umzuwandeln :
hexid := fmt.Sprintf("%x", string(objid))
Wenn Sie es nur ausdrucken möchten, können Sie das direkt tun:
fmt.Printf("%x", string(objid))
Hinweis: Konvertieren in string wichtig ist sonst der fmt Paket würde seinen String() aufrufen -Methode, die zu einer Zeichenfolge wie ObjectIdHex("537f700b537461b70c5f0000") führt und dies würde in Hex konvertiert werden, was eindeutig nicht das ist, was Sie wollen.
Alternativ Sie können den encoding/hex verwenden
Paket und den hex.EncodeToString()
Funktion:
hexid := hex.EncodeToString([]byte(objid))