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

Chr*_*tin 6 random go

Go的math/random库缺少一个生成64位数字的函数.这已经是一个公开的问题大约四年了.与此同时,变通方法是什么样的?

icz*_*cza 9

最简单的是打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,因为我们使用其所有字节生成随机数,字节顺序完全无关紧要.


Zac*_*ner 5

rand.Uint64()您可以直接 拨打: r := rand.Uint64()

Uint64 从默认 Source 返回一个伪随机 64 位值作为 uint64。

https://golang.org/pkg/math/rand/#Uint64

这在版本及更高版本中可用1.8changelog