首页 > 解决方案 > 如何将 UUID 字符串转换为 UUID 类型

问题描述

我有一个要更改为 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 接受的形式。

标签: arraysstringparsinggouuid

解决方案


github.com/satori/go.uuid,使用uuid.FromString

FromString 返回从字符串输入解析的 UUID。输入应采用 UnmarshalText 接受的形式。

如果解析失败,此方法将返回UUID或返回error。您有两个选项可以避免显式错误处理:

  • FromStringOrNil, 它只返回 a UUID, 但可能nil在出错的情况下
  • MustFromString, 当is not的错误时会发生恐慌nil。你像这样使用:
uuid.Must(uuid.FromString("69359037-9599-48e7-b8f2-48393c019135"))

github.com/google/uuid,使用uuid.Parse。该模式的其余部分与 相同satori/uuid


在您的特定情况下,解析 UUID 似乎没有问题,但是您发布的代码似乎没有产生您提到的错误。相反,还有另一个问题:

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

您正在尝试重新分配 的值uuid.FromString,这是 a UUIDa[0]大概是 a 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
    }
}

推荐阅读