如何在 Go 中将 Postgres UUID 转换回人类可读的字符串?

Saq*_*Ali 5 byte go

UUID Go Postgres 库定义了这样的类型:

\n
type UUID struct {\n    UUID   uuid.UUID\n    Status pgtype.Status\n}\n\nfunc (dst *UUID) Set(src interface{}) error {\n<Remainder Omitted>\n\n\n    \n
Run Code Online (Sandbox Code Playgroud)\n

我的代码使用这个库:

\n
import pgtype/uuid\n\nstring_uuid := uuid.New().String()\nfmt.Println("string_uuid = ", string_uuid)\nmyUUID := pgtype.UUID{}\nerr = myUUID.Set(string_uuid)\nif err != nil {\n    panic()\n}\nfmt.Println("myUUID.Bytes = ", myUUID.Bytes)\nfmt.Println("string(myUUID.Bytes[:]) = ", string(myUUID.Bytes[:]))\n
Run Code Online (Sandbox Code Playgroud)\n

这是输出:

\n
string_uuid =  abadf98f-4206-4fb0-ab91-e77f4380e4e0\nmyUUID.Bytes =  [171 173 249 143 66 6 79 176 171 145 231 127 67 128 228 224]\nstring(myUUID.Bytes[:]) =  \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdBO\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdC\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n
Run Code Online (Sandbox Code Playgroud)\n

abadf98f-4206-4fb0-ab91-e77f4380e4e0一旦将其放入myUUIDwhich is 类型中,如何才能恢复到原始的人类可读的 UUID 字符串pgtype.UUID{}

\n

Let*_*don 7

问题中的代码使用pgtype.UUID,而不是从问题的散文链接的gofrs UUID 。

pgtype.UUID类型没有获取 UUID 字符串表示形式的方法,但在应用程序代码中执行此操作很容易:

s := fmt.Sprintf("%x-%x-%x-%x-%x", myUUID.Bytes[0:4], myUUID.Bytes[4:6], myUUID.Bytes[6:8], myUUID.Bytes[8:10], myUUID.Bytes[10:16])
Run Code Online (Sandbox Code Playgroud)

如果您想要不带破折号的十六进制,请执行此操作:

s := fmt.Sprintf("%x", myUUID.Bytes)
Run Code Online (Sandbox Code Playgroud)

如果应用程序使用gofrs UUID,则使用:

s := myUUID.UUID.String()
Run Code Online (Sandbox Code Playgroud)