登录
首页 >  Golang >  Go问答

如何生成形如“9e316d9e-a018fdc02a8352dea61ffd1d”的UUID?

来源:stackoverflow

时间:2024-02-26 22:09:26 161浏览 收藏

golang学习网今天将给大家带来《如何生成形如“9e316d9e-a018fdc02a8352dea61ffd1d”的UUID?》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

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

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

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


解决方案


您可以用一行完成:

// 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

这是不可能的,因为 uuid 每个定义都是 16 字节的数字。当然,您可以使用子字符串和 unix 时间戳生成 8 个字符长的唯一字符串。

在生成更长的 uuid 并对它们进行子字符串化时也要小心,因为 id 的某些部分可能包含固定字节(例如 mac、dce 和 md5 uuid 就是这种情况),并且这种形式的 uuid 9e316d9e-a018fdc02a8352dea61ffd1d 没有保证真正独一无二。

今天关于《如何生成形如“9e316d9e-a018fdc02a8352dea61ffd1d”的UUID?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>