rogpeppe/fastuuid

GitHub: rogpeppe/fastuuid

一个高性能的 Go 语言 UUID 生成库,通过随机起点顺序递增的方式实现极快的 192 位 UUID 生成,同时兼容 128 位 RFC-4122 V4 格式。

Stars: 88 | Forks: 15

# fastuuid -- import "github.com/rogpeppe/fastuuid" fastuuid 包提供了快速的 192 位通用唯一标识符生成功能。 它还为 128 位 RFC-4122 V4 UUID 字符串提供了简单的支持。 请注意,生成的 UUID 是不可预测的——从 Generator 生成的每个 UUID 都与前一个生成的 UUID 相邻。 为了与另外两个流行的 UUID 生成包 github.com/satori/go.uuid 和 github.com/google/uuid 进行比较,以下是一些 benchmark 结果: ``` BenchmarkNext-4 128272185 9.20 ns/op BenchmarkHex128-4 14323180 76.4 ns/op BenchmarkContended-4 45741997 26.4 ns/op BenchmarkSatoriNext-4 1231281 967 ns/op BenchmarkSatoriHex128-4 1000000 1041 ns/op BenchmarkSatoriContended-4 1765520 666 ns/op BenchmarkGoogleNext-4 1256250 958 ns/op BenchmarkGoogleHex128-4 1000000 1044 ns/op BenchmarkGoogleContended-4 1746570 690 ns/op ``` ## 用法 #### func Hex128 ``` func Hex128(uuid [24]byte) string ``` Hex128 返回给定 UUID 前 128 位的 RFC4122 V4 表示形式。例如: ``` f81d4fae-7dec-41d0-8765-00a0c91e6bf6. ``` 注意:在编码之前,它会交换第 6 和第 9 个字节,以便 Generator.Next 返回的 UUID 的所有可变位都能反映在 Hex128 表示中。 如果你需要不可预测的 UUID,可以考虑在将其传递给 Hex128 之前对 uuid 进行哈希处理(例如使用 SHA256)。 #### func ValidHex128 ``` func ValidHex128(id string) bool ``` ValidHex128 用于判断 id 是否为有效的 UUID,该 UUID 可由 Hex128 以及各种其他 UUID 包(例如 github.com/satori/go.uuid 的 NewV4 函数)返回。 请注意,它不允许使用大写的十六进制字符。 #### type Generator ``` type Generator struct { } ``` Generator 表示一个 UUID 生成器,它从一个随机起点开始按顺序生成 UUID。 #### func MustNewGenerator ``` func MustNewGenerator() *Generator ``` MustNewGenerator 的作用类似于 NewGenerator,但在失败时会引发 panic。 #### func NewGenerator ``` func NewGenerator() (*Generator, error) ``` NewGenerator 返回一个新的 Generator。如果 crypto/rand 读取失败,它可能会返回错误。 #### func (*Generator) Hex128 ``` func (g *Generator) Hex128() string ``` Hex128 是一个便捷方法,它返回 Hex128(g.Next())。 #### func (*Generator) Next ``` func (g *Generator) Next() [24]byte ``` Next 返回生成器生成的下一个 UUID。只有前 8 个字节可能与前一个 UUID 不同,因此截取前 16 个字节足以提供一个安全性稍低的 128 位 UUID。 并发调用此方法是可行的。
标签:EVTX分析, Go, Ruby工具, UUID生成, 开发库, 性能优化, 日志审计, 检测绕过