我有这样的代码:
u := make([]byte, 16)
_, err := rand.Read(u)
if err != nil {
return
}
u[8] = (u[8] | 0x80) & 0xBF // what does this do?
u[6] = (u[6] | 0x40) & 0x4F // what does this do?
return hex.EncodeToString(u)
它返回一个长度为 32 的字符串,但我认为它不是有效的 UUID。如果是真实的UUID,为什么是UUID,修改 u[8]
和 u[6]
的值的代码的目的是什么?
有没有更好的生成 UUID 的方法?
原文由 hardPass 发布,翻译遵循 CC BY-SA 4.0 许可协议
这些行将字节 6 和 8 的值限制在特定范围内。
rand.Read
返回0-255
范围内的随机字节,这些字节并非 UUID 的所有有效值。据我所知,应该对切片中的所有值都这样做。如果您使用的是 Linux,您也可以调用
/usr/bin/uuidgen
。哪个产量: