在Go中生成固定长度随机数的最快最简单的方法是什么?
假设生成8位长的数字,rand.Intn(100000000)
的问题是结果可能远小于8位,并且用前导零填充它对我来说不是一个好的答案。
即,从长度的角度来看,我更关心随机性的质量。所以我想,对于这个具体的问题,以下是最快最简单的方法吗?
99999999 - rand.Int63n(90000000)
即,我认为Int63n
对我的案例可能比Intn
更好。它是真的,还是只是一厢情愿的想法?关于完整的8位数的随机性,两者是否相同,或者真的有一个比另一个好?
最后,还有比上面更好的方法吗?
更新:
请大家知道,请不要提供low + rand(hi-low)
作为答案。这相当于我现在正在做的事情,并没有回答我的真实问题,“关于完整8位数的随机性,两者是否相同,或者真的有一个比另一个好?“
如果没有人能回答这个问题,我会在两者之间绘制二维散点图并找出自己......
由于
答案 0 :(得分:7)
这是用于生成范围
内的数字的通用函数func rangeIn(low, hi int) int {
return low + rand.Intn(hi-low)
}
上查看
在您的特定情况下,尝试生成8位数字,范围为(10000000, 99999999)
答案 1 :(得分:2)
取决于您要使用的值范围。
如果允许值范围[0-99999999]并填充零点,则错误号码< 8,然后像fmt.Sprintf("%08d",rand.Intn(100000000))
一样使用fmt。
如果你不想要填充,其值在[10000000,99999999]范围内,那么给它一个基础,如ranNumber := 10000000
+ rand.Intn(90000000)`