如何在Go中生成固定长度的随机数?

时间:2016-03-15 02:27:47

标签: random go numbers

在Go中生成固定长度随机数的最快最简单的方法是什么?

假设生成8位长的数字,rand.Intn(100000000)的问题是结果可能远小于8位,并且用前导零填充它对我来说不是一个好的答案。

即,从长度的角度来看,我更关心随机性的质量。所以我想,对于这个具体的问题,以下是最快最简单的方法吗?

99999999 - rand.Int63n(90000000)

即,我认为Int63n对我的案例可能比Intn更好。它是真的,还是只是一厢情愿的想法?关于完整的8位数的随机性,两者是否相同,或者真的有一个比另一个好?

最后,还有比上面更好的方法吗?

更新:

请大家知道,请不要提供low + rand(hi-low)作为答案。这相当于我现在正在做的事情,并没有回答我的真实问题,“关于完整8位数的随机性,两者是否相同,或者真的有一个比另一个好?“

如果没有人能回答这个问题,我会在两者之间绘制二维散点图并找出自己......

由于

2 个答案:

答案 0 :(得分:7)

这是用于生成范围

内的数字的通用函数
func rangeIn(low, hi int) int {
    return low + rand.Intn(hi-low)
}

Playground

上查看

在您的特定情况下,尝试生成8位数字,范围为(10000000, 99999999)

答案 1 :(得分:2)

取决于您要使用的值范围。

  1. 如果允许值范围[0-99999999]并填充零点,则错误号码< 8,然后像fmt.Sprintf("%08d",rand.Intn(100000000))一样使用fmt。

  2. 如果你不想要填充,其值在[10000000,99999999]范围内,那么给它一个基础,如ranNumber := 10000000 + rand.Intn(90000000)`