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))