Go的math/random
庫缺少一個函數來生成64位數字。這已經是an open issue約四年。與此同時,解決方法是什麼樣的?如何在Go中生成隨機uint64?
6
A
回答
9
,最簡單的是調用rand.Uint32()
兩次:
func Uint64() uint64 {
return uint64(rand.Uint32())<<32 + uint64(rand.Uint32())
}
另一種選擇是調用rand.Read()
(was added in Go 1.7)讀取8個字節,然後使用encoding/binary
包以獲得從它uint64
值:
func Uint64() uint64 {
buf := make([]byte, 8)
rand.Read(buf) // Always succeeds, no need to check error
return binary.LittleEndian.Uint64(buf)
}
注意:正如文檔rand.Read()
所指出的那樣,它總是讀取與傳遞片段的長度一樣多的字節,並且總是返回nil
錯誤,所以不需要c heck錯誤在這種情況下。
注意#2:您也可以使用binary.BigEndian
而不是binary.LittleEndian
,因爲我們使用它的所有字節生成一個隨機數,字節順序是完全不相關的。
4
您還可以閱讀8個隨機字節,並轉換成UINT64
b := make([]byte, 8)
_, err := rand.Read(b)
return binary.LittleEndian.Uint64(b), err
相關問題
- 1. 在Go中生成隨機數
- 2. 如何在Go lang中生成隨機日期?
- 3. GO:操作隨機生成的float64
- 4. 如何在django中生成隨機數
- 5. 如何在java中生成隨機數
- 6. 如何在android中隨機生成BigInteger.probablePrime?
- 7. 如何在Haskell中隨機生成一個隨機生成的數字列表
- 8. 如何生成隨機UIColor?
- 9. 如何生成隨機圖?
- 10. 如何在Go中生成一個固定長度的隨機數?
- 11. 在Android中隨機生成
- 12. 如何在程序集中生成隨機數生成器?
- 13. 生成隨機的,固定長度的字節數組在Go
- 14. 在隨機生成50個隨機數中使用隨機數#
- 15. 生成幾何隨機數
- 16. Python中生成隨機數
- 17. 在Laravel生成隨機數
- 18. 隨機數生成在PySpark
- 19. 如何從matlab中的隨機數生成器生成樣本?
- 20. 如何在生成文件的範圍內生成隨機數?
- 21. 隨機數生成
- 22. 生成隨機數
- 23. 生成隨機圖
- 24. 生成隨機ROWID
- 25. 生成隨機數
- 26. ArrayList隨機生成
- 27. Haskell隨機生成
- 28. 生成隨機ASCII
- 29. 生成隨機數
- 30. 生成隨機詞
使用兩個隨機UINT32的建議問題,任何理由不爲你工作? – evanmcdonnal
你可以移位 - 或兩個int32數字,或類似的東西。您也可以使用crypto/rand軟件包並將字節緩衝區複製到uint64。 –
在10月底的1.8發佈週期結束之前,應該修復此問題:https://go-goview.googlesource.com/c/27253/1 –