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