在min和max之间生成Random uint64

时间:2017-12-17 15:22:28

标签: go random

如何在Go?

中生成随机64位无符号整数

首先,我需要致电

rand.Seed(0)

然后我需要一个函数返回带有以下签名的uint64

func random(min, max uint64) uint64 {
}

上面的函数应该返回一个随机的64位无符号整数 范围[min,max](包括最小值和最大值)

1 个答案:

答案 0 :(得分:1)

我不确定你为什么被投票。我认为您担心max - min大于MaxInt64的情况,在这种情况下rand.Int63n会因为您的评论而失败。我会单独处理这个案子。

const maxInt64 uint64 = 1 << 63 - 1

func random(min, max uint64) uint64 {
    return randomHelper(max - min) + min
}

func randomHelper(n uint64) uint64 {
    if n < maxInt64 {
        return uint64(rand.Int63n(int64(n+1)))
    }
    x := rand.Uint64()
    for x > n {
        x = rand.Uint64()
    }
    return x
}