如何获取“9e316d9e-a018fdc02a8352dea61ffd1d”形式的uuid?

How to get uuid in the form of "9e316d9e-a018fdc02a8352dea61ffd1d"?

我知道如何以 uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, 的形式获取 uuid,但我需要以“9e316d9e-a018fdc02a8352dea61ffd1d”的形式获取 uuid。

我正在使用 https://github.com/satori/go.uuid

我试过了,但我找不到要在 Google 上搜索的项目。 (如果您知道搜索项,那么很明显)。

这是不可能的,因为根据定义,UUID 是一个 16 字节的数字。但当然,您可以生成带有子字符串和 unix 时间戳的 8 个字符长的唯一字符串。

还要小心生成更长的 UUID 并对它们进行子字符串化,因为 ID 的某些部分可能包含固定字节(例如 MAC、DCE 和 MD5 UUID 就是这种情况)和这种形式UUID 9e316d9e-a018fdc02a8352dea61ffd1d 无法保证真正独一无二。

一行即可完成:

// var u uuid.UUID
fmt.Sprintf("%x-%x", u[:4], u[4:])

游乐场example.


编辑:

由于 fmt.Sprintf 不是最有效的编码方法,您可以使用 UUID.String() 建模:

buf := make([]byte, 33)
hex.Encode(buf, u[:4])
buf[8] = '-'
hex.Encode(buf[9:], u[4:])
return string(buf)

Playground