首页 > 后端开发 > Golang > 为什么 Go 的 rand.Intn() 会重复返回相同的数字?

为什么 Go 的 rand.Intn() 会重复返回相同的数字?

Mary-Kate Olsen
发布: 2024-12-09 20:57:14
原创
354 人浏览过

Why Does Go's `rand.Intn()` Return the Same Number Repeatedly?

理解 Go 的 rand.Intn

Go 标准库提供了用于生成随机数的 rand 包。但是,rand.Intn(n) 函数在重复调用时始终返回相同的值。这种行为提出了为什么会发生的问题。答案在于两个关键因素。

未初始化的全局源

默认情况下,rand 包使用生成确定性值序列的全局源。这意味着像 rand.Intn() 这样的函数的输出保持不变,除非这个 Source 用种子初始化。

要解决这个问题,必须使用 rand.Seed() 设置一个随机种子。一种常见的方法是使用从 time.Now().UnixNano() 获得的时间戳作为种子:

rand.Seed(time.Now().UnixNano())
登录后复制

这会初始化 Source 并将随机性引入到 rand.Intn() 生成的序列中。

Go Playground 缓存

导致观察到的行为的另一个因素是去游乐场。此在线工具会缓存代码片段的输出,这可能会导致相同的随机数序列始终显示,而不管实际的随机性如何。

为避免此缓存问题,建议在本地运行代码。这确保了在执行时生成随机种子,从而产生唯一的值序列。

通过初始化全局 Source 并避免 Go Playground 缓存,可以确保 rand.Intn() 生成真正的随机数Go 程序中的数字。

以上是为什么 Go 的 rand.Intn() 会重复返回相同的数字?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板