Wartość powiązana z kluczem "_id"
jest typu bson.ObjectId
który jest po prostu string
.
bson.M
jest typem map[string]interface{}
, więc potrzebujesz Aercji typu
aby uzyskać identyfikator jako ObjectId
:
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
Oraz ObjectId
ma ObjectId.Hex()
metoda, która zwraca dokładnie to, czego chcesz:identyfikator obiektu jako „czysty” ciąg szesnastkowy:
fmt.Println(objid.Hex())
Alternatywne
objid
można po prostu przekonwertować na string
ponieważ jego podstawowym typem jest string
. Możesz więc użyć wielu innych opcji, aby przekonwertować go na string
szesnastkowy :
hexid := fmt.Sprintf("%x", string(objid))
Jeśli chcesz go tylko wydrukować, możesz to zrobić bezpośrednio:
fmt.Printf("%x", string(objid))
Uwaga: Konwertowanie go na string
jest ważne, w przeciwnym razie fmt
pakiet wywołałby jego String()
metoda, która skutkuje ciągiem takim jak ObjectIdHex("537f700b537461b70c5f0000")
i to właśnie zostanie zamienione na szesnastkowe, co wyraźnie nie jest tym, czego chcesz.
Alternatywnie możesz użyć encoding/hex
pakiet i hex.EncodeToString()
funkcja:
hexid := hex.EncodeToString([]byte(objid))