首页 >后端开发 >Golang >如何使用 Go 的 Rand 包生成真正的随机数?

如何使用 Go 的 Rand 包生成真正的随机数?

Susan Sarandon
Susan Sarandon原创
2024-11-10 08:48:03186浏览

How to Generate Truly Random Numbers with Go's Rand Package?

使用 Rand 包解决 Go 中的伪随机数生成问题

问题:

Go 中的 rand 包提供了Int31n 函数生成伪随机数,但重复执行后似乎会产生相同的输出。有没有办法在每次调用函数时获得真正随机的结果?

答案:

rand 包采用确定性伪随机数生成器(PRNG)。每次运行程序时,PRNG 都会根据称为“种子”的固定初始值生成相同的数字序列。

要每次运行生成不同的随机数,必须使用独特的种子。一种常见的方法是使用以纳秒为单位的当前时间,该时间在每次执行程序时都会发生变化。这可以使用以下代码来完成:

<code class="go">import "time"

func main() {
    rand.Seed(time.Now().UnixNano())
    fmt.Println(rand.Int31n(100))
}</code>

或者,crypto/rand 包提供更安全的随机源。它从各种系统源收集熵,例如鼠标移动、处理器温度和键盘输入。然而,与 rand 包相比,它的性能可能会慢一些。

通过设置唯一的种子或利用 crypto/rand 包,您可以确保 rand.Int31n 函数每次调用时生成真正的随机数.

以上是如何使用 Go 的 Rand 包生成真正的随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn