当我遇到以下情况时,我正在创建一元测试:
但是,我找不到将bson.ObjectId
设置为nil
或设置为零的方法。
有人知道该怎么做或可以解决吗?
答案 0 :(得分:2)
bson.ObjectId是string的别名,因此零值是空字符串“”
答案 1 :(得分:1)
基于@dom答案(在评论中),有一种我现在正在使用的解决方法:
package your_package
import "github.com/globalsign/mgo/bson"
func GenerateNewGuidHelper() *bson.ObjectId {
id := bson.NewObjectId()
return &id
}
func IsStringIdValid(id string) bool {
return id != "" && bson.IsObjectIdHex(id)
}
func ConvertStringIdToObjectId(id string) *bson.ObjectId {
if id != "" && bson.IsObjectIdHex(id){
bsonObjectId := bson.ObjectIdHex(id)
return &bsonObjectId
}
return nil
}
func ConvertStringIdsToObjectIds(ids []string) []*bson.ObjectId {
var _ids []*bson.ObjectId
for _, id := range ids {
_ids = append(_ids, ConvertStringIdToObjectId(id))
}
return _ids
}
func IsObjectIdValid(id *bson.ObjectId) bool {
return id.Hex() != "" && bson.IsObjectIdHex(id.Hex())
}
func ConvertObjectIdToStringId(id *bson.ObjectId) string {
if id != nil {
return id.Hex()
}
return ""
}
func ConvertObjectIdsToStringIds(ids []*bson.ObjectId) []string {
var _ids []string
for _, id := range ids {
_ids = append(_ids, ConvertObjectIdToStringId(id))
}
return _ids
}
此外,如@dom所述,我现在将mongoDB ID保存为*bson.ObjectId
而不是bson.ObjectId
。示例:
package datamodels
import (
"github.com/globalsign/mgo/bson"
)
type User struct {
ID *bson.ObjectId `protobuf:"bytes,1,opt,name=id,proto3" json:"_id,omitempty" bson:"_id,omitempty"`
}
希望对您有帮助!
答案 2 :(得分:0)
或者您可以使用primitive.NilObjectID
NilObjectID是ObjectID的零值。