Go 的 math/random
库缺少生成 64 位数字的函数。这一直是an open issue大约四年。与此同时,解决方法是什么样的?
最佳答案
编辑: Go 1.8 添加了一个 rand.Uint64()
功能和一个Rand.Uint64()
方法,因此您可以直接使用它们。
其余答案早于 Go 1.8。
最简单的方法是调用 rand.Uint32()
两次:
func Uint64() uint64 {
return uint64(rand.Uint32())<<32 + uint64(rand.Uint32())
}
另一种选择是调用 rand.Read()
( was added in Go 1.7 ) 读取 8 个字节,然后使用 encoding/binary
包以从中获取 uint64
值:
func Uint64() uint64 {
buf := make([]byte, 8)
rand.Read(buf) // Always succeeds, no need to check error
return binary.LittleEndian.Uint64(buf)
}
注意:正如 rand.Read()
的文档所述,它总是读取与传递的 slice 长度一样多的字节,并且总是返回 nil
错误,所以在这种情况下不需要检查错误。
注意 #2:您还可以使用 binary.BigEndian
而不是 binary.LittleEndian
,因为我们使用其所有字节生成随机数,字节顺序完全无关紧要。
关于random - 你如何在 Go 中生成一个随机的 uint64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39756133/