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

时间:2016-09-28 19:31:19

标签: random go

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:4)

您还可以读取8个随机字节,并转换为uint64

b := make([]byte, 8)
_, err := rand.Read(b)
return binary.LittleEndian.Uint64(b), err

答案 2 :(得分:1)

您可以直接致电rand.Uint64() r := rand.Uint64()

  

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

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

这适用于版本1.8及以上版本:changelog

相关问题