bson.ObjectId 的 nil/zero 值是多少

What is the nil/zero value of bson.ObjectId

当我遇到以下情况时,我正在创建一元测试:

但是,我找不到将 bson.ObjectId 设置为 nil 或零的方法。

有人知道怎么做或解决方法吗?

bson.ObjectId 是 string 的别名,因此零值是一个空字符串 ""

基于@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"`
}

希望对您有所帮助!

或者您可以使用 primitive.NilObjectID

NilObjectID is the zero value for ObjectID.