如何在 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>
可以改进此解决方案以在字符串表示中找到 "
个字符并使用索引而不是固定的 10
和 34
,但您不应该转移和首先解析 ObjectID.String()
的结果。你应该首先使用它的 ObjectID.Hex()
方法,可以将 as-is 传递给 primitive.ObjectIDFromHex()
.
有类似问题。但大多数情况下,他们使用 Hex()(如
类型的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>
可以改进此解决方案以在字符串表示中找到 "
个字符并使用索引而不是固定的 10
和 34
,但您不应该转移和首先解析 ObjectID.String()
的结果。你应该首先使用它的 ObjectID.Hex()
方法,可以将 as-is 传递给 primitive.ObjectIDFromHex()
.