如何将UUID字符串转换为UUID类型

7

我有一个字符串UUID数组,我想要将其更改为UUID。以下是数据示例:

["69359037-9599-48e7-b8f2-48393c019135" "1d8a7307-b5f8-4686-b9dc-b752430abbd8"]

我该如何更改或解析它?我尝试使用 uuid.fromString() 方法:

if len(a) == 2 {
    user1 := a[0]
    a[0], _ = uuid.FromString(a[0])
}

然而,这给了我一个错误

FromString从字符串输入解析UUID。输入应该是UnmarshalText接受的格式。

2个回答

19

使用 github.com/gofrs/uuid/v5 库,使用 uuid.FromString 方法。

FromString 方法从字符串输入解析 UUID。输入的格式应符合 UnmarshalText 所接受的格式。

该方法返回 UUID 或者在解析失败时返回一个 error。你有两个选项可以避免显式的错误处理:

  • FromStringOrNil,它仅返回一个 UUID,但可能在出错时返回 nil
  • Must,它会在 FromString 的错误不是 nil 时引发 panic。你可以像下面这样使用:
uuid.Must(uuid.FromString("69359037-9599-48e7-b8f2-48393c019135"))

警告:satori/go.uuid是一种较老的流行UUID包,现在已不再维护并存在未修复的问题。 上面提到的gofrs/uuid是一个被维护的分支。根据该包文档:

我们建议使用此包的v2.0.0+版本,因为在我们分叉原始包之前创建的版本低于2.0.0,存在一些已知的缺陷。


对于github.com/google/uuid,请使用uuid.Parse。其余部分与satori/uuid相同。


针对你的特定情况,似乎解析UUID没有问题,但你发布的代码似乎没有出现你提到的错误。 反而有另外一个问题:

a[0], _ = uuid.FromString(a[0])

你试图重新分配值给uuid.FromString,它是一个UUID,而a[0],可能是一个string

以下代码可以正常工作(在Go Play上查看):

var a = []string{"69359037-9599-48e7-b8f2-48393c019135", "1d8a7307-b5f8-4686-b9dc-b752430abbd8"}

func main() {

if len(a) == 2 {
        user1 := a[0]
        s, _ := uuid.FromString(a[0])

        fmt.Println(user1) // prints 69359037-9599-48e7-b8f2-48393c019135
        fmt.Println(s) // prints 69359037-9599-48e7-b8f2-48393c019135
    }
}

0
使用 github.com/google/uuid 中的函数: func Parse(s string) (UUID, error) 你还可以使用 func MustParse(s string) UUI,在出现错误时自动触发 panic。
详细信息请参阅文档:uuid package

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接