Стойността, свързана с ключ "_id" е от тип bson.ObjectId
което е просто string .
bson.M
е тип map[string]interface{} , така че имате нужда от Твърдение за тип
за да получите идентификатора като ObjectId :
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
И ObjectId има ObjectId.Hex()
метод, който връща точно това, което искате:идентификаторът на обекта като "чист" шестнадесетичен низ:
fmt.Println(objid.Hex())
Алтернативи
objid може просто да се преобразува в string защото основният му тип е string . Така че можете да използвате редица допълнителни опции, за да го конвертирате в шестнадесетичен string :
hexid := fmt.Sprintf("%x", string(objid))
Ако просто искате да го отпечатате, можете да направите директно:
fmt.Printf("%x", string(objid))
Забележка: Конвертирането му в string важен е друг fmt пакетът ще извика своя String() метод, който води до низ като ObjectIdHex("537f700b537461b70c5f0000") и това е, което ще бъде преобразувано в шестнадесетичен, което очевидно не е това, което искате.
Алтернативно можете да използвате encoding/hex
пакет и hex.EncodeToString()
функция:
hexid := hex.EncodeToString([]byte(objid))