问题:
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中文网其他相关文章!