La valeur associée à la clé "_id"
est de type bson.ObjectId
qui est simplement une string
.
bson.M
est un type map[string]interface{}
, vous avez donc besoin de Assertion de type
pour obtenir l'identifiant en tant que ObjectId
:
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
Et le ObjectId
a un ObjectId.Hex()
méthode qui renvoie exactement ce que vous voulez :l'identifiant de l'objet sous la forme d'une chaîne hexadécimale "pure" :
fmt.Println(objid.Hex())
Alternatives
objid
peut simplement être converti en string
car son type sous-jacent est string
. Vous pouvez donc utiliser un certain nombre d'options supplémentaires pour le convertir en une string
hexadécimale :
hexid := fmt.Sprintf("%x", string(objid))
Si vous voulez juste l'imprimer, vous pouvez faire directement :
fmt.Printf("%x", string(objid))
Remarque : Le convertir en string
est important sinon le fmt
le paquet appellerait son String()
méthode qui donne une chaîne comme ObjectIdHex("537f700b537461b70c5f0000")
et c'est ce qui serait converti en hexadécimal, ce qui n'est clairement pas ce que vous voulez.
Alternativement vous pouvez utiliser le encoding/hex
package et le hex.EncodeToString()
fonction :
hexid := hex.EncodeToString([]byte(objid))