对 rand.Intn 生成相同值进行故障排除
链接中提供的 Go 示例确实为 rand.Intn(10) 返回相同的值除非修改以初始化随机数生成器。这里解释一下:
-
未初始化的随机数来源:
- rand.Intn 和 rand 包中的其他函数使用全局 Source生成随机数。
- 默认情况下,此 Source 未初始化,导致确定性序列。
- 要初始化 Source,请使用 rand.Seed(time.Now().UnixNano())。
-
Go Playground缓存:
- Go Playground,示例为运行时,经常缓存结果以提高性能。
- 此缓存可能会影响随机数生成的输出,使其显得具有确定性。
解决这些问题并一致地获取随机数,请考虑以下步骤:
- 使用初始化随机数生成器rand.Seed(time.Now().UnixNano()).
- 如果在 Go Playground 上运行示例,请在运行前清除输出以避免缓存。
通过以下操作通过这些步骤,您可以有效地使用 rand.Intn 生成随机数,并避免重复接收相同的值。
以上是为什么 Go 的 rand.Intn 有时会生成相同的值?的详细内容。更多信息请关注PHP中文网其他相关文章!