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生成, 开发库, 性能优化, 日志审计, 检测绕过