В библиотеке Go math/random
отсутствует функция для генерации 64-разрядных номеров. Это было an open issue около четырех лет. В то же время, как выглядит обходное решение?Как вы генерируете случайный uint64 в Go?
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 error в этом случае.
Примечание № 2: вы также можете использовать binary.BigEndian
вместо binary.LittleEndian
, так как мы генерируем случайное число, используя все его байты, порядок байтов совершенно не имеет значения.
4
Вы также можете прочитать 8 случайных байт и преобразовать в uint64
b := make([]byte, 8)
_, err := rand.Read(b)
return binary.LittleEndian.Uint64(b), err
Смежные вопросы
- 1. Сортировка куска uint64 в go
- 2. Как вы генерируете двухтональные частоты в MATLAB?
- 3. Скопируйте содержимое структуры в uint64 в Go
- 4. Есть ли uint64 литералы в Go?
- 5. Как вы надежно генерируете последовательные номера?
- 6. Как вы генерируете определенное количество простых чисел?
- 7. В цикле PHP (Wordpress) как вы генерируете последовательность уникальных чисел?
- 8. Как вы абстрактно генерируете в вложенных типах ржавчины?
- 9. PHP: Как вы генерируете все возможные комбинации значений в массиве?
- 10. Как вы автоматически генерируете SDF в Code First approach
- 11. Как вы получаете или генерируете URL-адрес объекта в ведре?
- 12. Как вы можете преобразовать UInt64.max в строку в Swift?
- 13. Go: конвертировать uint64 в Int64 без потери информации
- 14. Как вы генерируете классы на C# из схемы SQL Server?
- 15. Как вы генерируете криптографически безопасные случайные числа с PHP?
- 16. Как вы произвольно генерируете x количество значений и сохраняете их?
- 17. Как вы генерируете xml из нестроковых типов данных, используя minidom?
- 18. Как вы генерируете rDoc для определенного плагина с использованием rake
- 19. Почему «UInt64 [] arr = новый UInt64 [UInt64.MaxValue];» бросать исключение?
- 20. Как конвертировать UInt64 в Int64?
- 21. Как превратить UInt64 в AnyObject?
- 22. Как вы копируете файл в Go?
- 23. Как вы избегаете необработанного HTML в Go?
- 24. Как вы строите цепочку tls.Certficate в Go?
- 25. Использование Printf.printf с Uint64.uint64 Тип OCAML
- 26. Как работают Bitshifting и UInt64?
- 27. NSString to UInt64
- 28. C++ В чем разница между uint64 и * uint64?
- 29. jquery & go: как вы устанавливаете json-заголовок
- 30. Как реализовать BitSet с Go?
Этот вопрос предложил использовать два случайных uint32, любой причине, что не работает для вас? – evanmcdonnal
вы можете сдвинуть-ИЛИ два int32 числа или что-то подобное. Вы также можете использовать пакет crypto/rand и скопировать байт-буфер в uint64. –
Это должно быть исправлено до окончания цикла выпуска 1.8 в конце октября: https://go-review.googlesource.com/c/27253/1 –