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