random - 你如何在 Go 中生成一个随机的 uint64?

标签 random go

Go 的 math/random 库缺少生成 64 位数字的函数。这一直是an open issue大约四年。与此同时,解决方法是什么样的?

最佳答案

编辑: Go 1.8 添加了一个 rand.Uint64()功能和一个Rand.Uint64()方法,因此您可以直接使用它们。

其余答案早于 Go 1.8。


最简单的方法是调用 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() 的文档所述,它总是读取与传递的 slice 长度一样多的字节,并且总是返回 nil 错误,所以在这种情况下不需要检查错误。

注意 #2:您还可以使用 binary.BigEndian 而不是 binary.LittleEndian,因为我们使用其所有字节生成随机数,字节顺序完全无关紧要。

关于random - 你如何在 Go 中生成一个随机的 uint64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39756133/

相关文章:

javascript - 错误无法读取未定义的属性 'add'

reflection - golang 反射(reflect)创建对象报错

arrays - 数组 Varchar (psql) 到数组字符串 (golang)

java - Java中如何计算结果?

MYSQL随机选择每个类别

go - 从 golang 中传入的 https 请求中提取公用名

go - Golang 存储库的正确结构

parsing - 如何正确解析时区代码

Java——画一个三角形

javascript - 受约束的随机数总是用 javascript/jquery 总计约束