【问题标题】:How to convert String to Primitive.ObjectID in Golang?如何在 Golang 中将 String 转换为 Primitive.ObjectID?
【发布时间】:2022-01-28 07:16:10
【问题描述】:

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

【问题讨论】:

    标签: string go casting type-conversion primitive


    【解决方案1】:

    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() 方法,该方法可以按原样传递给primitive.ObjectIDFromHex()

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 2016-10-02
      • 2017-02-09
      • 2019-12-02
      • 2017-06-05
      • 2011-01-26
      • 2020-07-06
      • 1970-01-01
      • 2019-10-23
      相关资源
      最近更新 更多