一尘不染

如何在Go中生成随机uint64?

go

Go的math/random库缺少生成64位数字的功能。大约四年来这是一个未解决的问题。同时,解决方法是什么样的?


阅读 329

收藏
2020-07-02

共1个答案

一尘不染

最简单的方法是拨打rand.Uint32()两次:

func Uint64() uint64 {
    return uint64(rand.Uint32())<<32 + uint64(rand.Uint32())
}

另一个选择是调用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)
}

注意:作为rand.Read()状态文档,它始终读取与传递的切片长度相同的字节,并且始终返回nil错误,因此在这种情况下无需检查错误。

注意#2:您也可以使用binary.BigEndian代替binary.LittleEndian,因为我们正在使用其所有字节生成一个随机数,所以字节顺序是完全不相关的。

2020-07-02