你如何在Go中生成随机uint64?

Go的数学/随机库缺少一个生成64位数字的函数.这已经是 an open issue大约四年了.与此同时,变通方法是什么样的?
最简单的方法是拨打 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()的文档状态,它总是读取与传递的片的长度一样多的字节,并且它总是返回nil错误,因此在这种情况下不需要检查错误.

注意#2:您也可以使用binary.BigEndian而不是binary.LittleEndian,因为我们使用其所有字节生成随机数,字节顺序完全无关紧要.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...