Giá trị được liên kết với khóa "_id" thuộc loại bson.ObjectId
mà chỉ đơn giản là một chuỗi string .
bson.M
là một loại giao diện map[string]interface{} , vì vậy bạn cần Xác nhận loại
để lấy id dưới dạng ObjectId :
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
Và ObjectId có ObjectId.Hex()
phương thức trả về chính xác những gì bạn muốn:id đối tượng dưới dạng chuỗi hex "thuần túy":
fmt.Println(objid.Hex())
Lựa chọn thay thế
objid chỉ có thể được chuyển đổi thành string vì kiểu cơ bản của nó là string . Vì vậy, bạn có thể sử dụng một số tùy chọn khác để chuyển đổi nó thành chuỗi string :
hexid := fmt.Sprintf("%x", string(objid))
Nếu bạn chỉ muốn in nó, bạn có thể thực hiện trực tiếp:
fmt.Printf("%x", string(objid))
Lưu ý: Chuyển nó thành string quan trọng khác là fmt gói sẽ gọi String() của nó phương thức dẫn đến một chuỗi như ObjectIdHex("537f700b537461b70c5f0000") và đây là những gì sẽ được chuyển đổi thành hex, điều này rõ ràng không phải là những gì bạn muốn.
Ngoài ra bạn có thể sử dụng encoding/hex
gói và hex.EncodeToString()
chức năng:
hexid := hex.EncodeToString([]byte(objid))