源码解读 github.com/satori/go.uuid
// NewV1 returns UUID based on current timestamp and MAC address. |
BigEndian 这里使用大端序,可能会出问题
获取时钟,当期时间 和 mac 地址
// Returns UUID v1/v2 storage state. |
初始化时钟和 mac 地址
func (g *generator) initStorage() { |
当前时间.
- 初始时间- UUID epoch (October 15, 1582) and Unix epoch (January 1, 1970).
- 当期时间戳(100ns 为单位)
const epochStart = 122192928000000000)
// Returns difference in 100-nanosecond intervals between |
总结
v1 生成 uuid 的基础数据是 100ns 基本的时间戳 + mac 地址(没有的情况为随机)
一般加入 timestamp 1.是为了时间维度 2.是为了便于 sort
但是 uuid 规范的的顺序是 time-low - time-mid - 4bits(version) + 12bits(time_hi)
所以是不能根据 uuid 来 sort 的