如何在 Golang 中将 String 转换为 Primitive.ObjectID?

How to convert String to Primitive.ObjectID in Golang?

有类似问题。但大多数情况下,他们使用 Hex()(如 )进行原始对象到字符串的转换。我正在使用 String() 进行转换。如何将其转换回原始对象类型?

类型的String()方法可能会导致任意字符串表示。解析它可能并不总是可能的,因为它可能不包含原始值所包含的所有信息,或者它可能不会以可明确解析的方式“呈现”。也不能保证 String() 的“输出”不会随时间改变。

ObjectID.String() 的当前实现是这样的:

func (id ObjectID) String() string {
    return fmt.Sprintf("ObjectID(%q)", id.Hex())
}

结果是这样的字符串:

ObjectID("4af9f070cc10e263c8df915d")

这是可解析的,你只需要取十六进制数,并将其传递给 primitive.ObjectIDFromHex():

例如:

id := primitive.NewObjectID()
s := id.String()
fmt.Println(s)

hex := s[10:34]
id2, err := primitive.ObjectIDFromHex(hex)
fmt.Println(id2, err)

这将输出(在 Go Playground 上尝试):

ObjectID("4af9f070cc10e263c8df915d")
ObjectID("4af9f070cc10e263c8df915d") <nil>

可以改进此解决方案以在字符串表示中找到 " 个字符并使用索引而不是固定的 1034,但您不应该转移和首先解析 ObjectID.String() 的结果。你应该首先使用它的 ObjectID.Hex() 方法,可以将 as-is 传递给 primitive.ObjectIDFromHex().