Go 语言 UUID 库 google/uuid 源码解析:UUID version4 的实现
package uuid
import (
"crypto/rand"
"encoding/binary"
"io"
)
// NewRandom 返回一个新的、随机版本4的UUID。
func NewRandom() UUID {
var u UUID
randomBytes(u[:]) // 使用全局随机源填充u
u[6] = (u[6] & 0x0f) | 0x40 // 设置版本4并清除所有变体
u[8] = (u[8] & 0x3f) | 0x80 // 设置Variant是80xx以便是RFC4122编码的UUID
return u
}
// randomBytes 使用全局随机源从rand.Reader读取n个字节到u。
func randomBytes(u []byte) error {
_, err := io.ReadFull(rand.Reader, u) // 读取随机源数据填充u
return err
}
这段代码定义了一个NewRandom
函数,用于创建一个版本4的UUID。它首先创建了一个UUID的实例,然后使用随机源填充其字节数组。接着,它通过设置适当的字节来确保UUID的版本和变体符合RFC4122规范。最后,返回一个新的、随机生成的UUID。
评论已关闭