O valor associado à chave
"_id"
é do tipo bson.ObjectId
que é simplesmente uma string
. bson.M
é um tipo map[string]interface{}
, então você precisa de Asserção de tipo
para obter o id como um ObjectId
:objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
E o
ObjectId
tem um ObjectId.Hex()
método que retorna exatamente o que você deseja:o id do objeto como uma string hexadecimal "pura":fmt.Println(objid.Hex())
Alternativas
objid
pode simplesmente ser convertido para string
porque seu tipo subjacente é string
. Assim, você pode usar várias opções adicionais para convertê-lo em uma string
hexadecimal :hexid := fmt.Sprintf("%x", string(objid))
Se você quiser apenas imprimi-lo, você pode fazer diretamente:
fmt.Printf("%x", string(objid))
Observação: Convertendo para
string
é importante senão o fmt
pacote chamaria seu String()
método que resulta em uma string como ObjectIdHex("537f700b537461b70c5f0000")
e isso é o que seria convertido em hexadecimal, o que claramente não é o que você deseja. Alternativamente você pode usar o
encoding/hex
pacote e o hex.EncodeToString()
função:hexid := hex.EncodeToString([]byte(objid))