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

Random 如何在Go中生成固定长度的随机数?,random,go,numbers,Random,Go,Numbers,在Go中生成固定长度随机数的最快和最简单的方法是什么 比如说,要生成8位长的数字,rand.Intn(100000000)的问题是,结果可能远小于8位数字,用前导零填充它看起来不是一个好的答案 也就是说,我更关心随机性的长度。所以我在想,对于这个特定的问题,以下是最快最简单的方法吗 99999999 - rand.Int63n(90000000) 也就是说,我想Int63n可能比Intn更适合我的情况。是真的,还是一厢情愿?关于完整8位数字的随机性,这两个数字是相同的,还是真的有一个比另一个更

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

比如说,要生成8位长的数字,
rand.Intn(100000000)
的问题是,结果可能远小于8位数字,用前导零填充它看起来不是一个好的答案

也就是说,我更关心随机性的长度。所以我在想,对于这个特定的问题,以下是最快最简单的方法吗

99999999 - rand.Int63n(90000000)
也就是说,我想
Int63n
可能比
Intn
更适合我的情况。是真的,还是一厢情愿?关于完整8位数字的随机性,这两个数字是相同的,还是真的有一个比另一个更好

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

更新:

请不要提供
low+rand(hi-low)
作为答案,这是众所周知的。这相当于我现在所做的,它并没有回答我真正的问题,“关于8位数字的随机性,这两个数字是相同的,还是真的有一个比另一个好?”

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


谢谢

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

  • 如果允许值范围为[0-9999999]且字符的ip号填充为零<8,则使用fmt,如
    fmt.Sprintf(“%08d”,rand.Intn(100000000))

  • 如果不需要填充,其值在[10000000,9999999]范围内,则给它一个基数,如
    ranNumber:=10000000
    +rand.Intn(90000000)`


  • 这是一个通用函数,用于生成范围内的数字

    func rangeIn(low, hi int) int {
        return low + rand.Intn(hi-low)
    }
    
    在电视上看到了吗


    在您的特定情况下,尝试生成8位数字,范围将是
    (100000009999999)

    您的用例是什么?对我来说,似乎你想要一个由8位数字组成的字符串,而不是一个数字本身?这个答案可能会有所帮助:@Ezra,这个问题实际上是受到这个问题的启发,尽管经过多次性能改进,仍然无法摆脱这个循环。是的,我确实希望字符串由8位数字组成,而不是一个数字本身。即使是十六进制数字也可以。关键是,我的上述解决方案可以一次完成,我相信这将比最快的解决方案快得多,这远不是简单的。用零填充没有什么错:如果填充一个随机数,它可能以一个或多个零开始,并且仍然是完全随机的。@Volker,我个人的品味没有什么不好,我不想要填充物。你可能喜欢
    00000023
    ,甚至
    00000004
    作为答案,但我个人不喜欢。我已经在OP中清楚地说明了这一点,所以我不认为你争论这一点有什么意义——这一切都归结于个人品味,所以请不要把你的观点强加给别人。如果我伤害了你的感情,请原谅。我只是不知道随机数与其说是数学问题,不如说是品味问题。很抱歉