有類似的問題。但大多數情況下,他們使用 Hex()(如這里)進行原始物件到字串的轉換。我正在使用 String() 進行轉換。如何將其轉換回原始物件型別?
uj5u.com熱心網友回復:
型別的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>
可以改進此解決方案以"在字串表示中查找字符并使用索引而不是固定的10and 34,但您不應該首先傳輸和決議結果ObjectID.String()。您應該ObjectID.Hex()首先使用它的方法,它可以按原樣傳遞給primitive.ObjectIDFromHex().
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/423082.html
標籤:
上一篇:如何從golang中的.ttf檔案中獲取字體系列名稱?
下一篇:golang中for回圈的性能
