在Go中生成固定長度隨機數的最快和最簡單的方法是什麼?如何在Go中生成一個固定長度的隨機數?
假設產生8位數字的長號碼,rand.Intn(100000000)
的問題是結果可能遠小於8位數字,並且用前導零填充它看起來對我來說不是一個好的答案。
也就是說,我更在意它的長度,關心隨機性的質量。所以我想,對於這個特定的問題,以下是最快和最簡單的方法嗎?
99999999 - rand.Int63n(90000000)
即,我想Int63n
可能是我的情況比Intn
更好。這是真的,還是隻是一廂情願?關於整個8位的隨機性,兩者是相同的,還是比另一個更好?
最後,還有比上面更好的方法嗎?
UPDATE:
請不要提供low + rand(hi-low)
的答案,因爲每個人都知道這一點。這相當於我現在正在做的事情,它並沒有回答我真正的問題,「關於整個8位數的隨機性,兩者是相同的,還是真的比另一個好?」。
如果沒有人能回答這個問題,我會繪製兩者之間的2-d散點圖,並找出自己...
感謝
您的用例是什麼?對我而言,你似乎想要一個由8位數字組成的字符串,而不是數字*本身*?這個答案可能有所幫助:http://stackoverflow.com/questions/22892120/how-to-generate-a-random-string-of-a-fixed-length-in-golang – Ezra
@Ezra,這個問題實際上是由儘管多次改進性能,仍然無法擺脫這種循環。是的,我確實希望字符串由8位數以上的數字組成。即使是十六進制數字也適合我。關鍵是,我的上述解決方案可以一次完成,我相信這將比那裏最快的解決方案快得多,這遠非簡單。 – xpt
使用零填充沒有問題:如果填充並且仍然是完全隨機的,則隨機數可能以一個或多個零開頭。 – Volker