Go的math/random
库缺少一个生成64位数字的函数.这已经是一个公开的问题大约四年了.与此同时,变通方法是什么样的?
最简单的是打rand.Uint32()
两次电话:
func Uint64() uint64 {
return uint64(rand.Uint32())<<32 + uint64(rand.Uint32())
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是调用rand.Read()
(在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)
}
Run Code Online (Sandbox Code Playgroud)
注意:作为rand.Read()
状态文档,它总是读取与传递的切片长度一样多的字节,并且它总是返回nil
错误,因此在这种情况下不需要检查错误.
注意#2:您也可以使用binary.BigEndian
而不是binary.LittleEndian
,因为我们使用其所有字节生成随机数,字节顺序完全无关紧要.
rand.Uint64()
您可以直接
拨打:
r := rand.Uint64()
Uint64 从默认 Source 返回一个伪随机 64 位值作为 uint64。
https://golang.org/pkg/math/rand/#Uint64
这在版本及更高版本中可用1.8
:changelog