解决 Go 中的随机数重复问题
在 Go 中,随机数生成有时会导致意外的重复,特别是在使用 rand.Intn( n int) int 用于生成随机整数。这是由于顶级随机数函数(例如 rand.Intn)使用的默认源在程序连续运行时会生成确定性的值序列。
为了解决此问题,解决方案在于使用 rand.Seed() 函数为随机数生成器提供种子。播种为生成器提供了一个随机值,用作初始化参数。常见的做法是使用当前的 Unix 时间戳作为种子:
<code class="go">rand.Seed(time.Now().UnixNano())</code>
例如,而不是:
<code class="go">package main import ( "fmt" "math/rand" ) func main() { fmt.Println(rand.Intn(10)) }</code>
它将始终返回相同的随机数,为生成器播种将确保每次运行都有不同的随机数:
<code class="go">package main import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().UnixNano()) fmt.Println(rand.Intn(10)) }</code>
请记住,如果不调用 rand.Seed(),生成器的行为就像以值 1 为种子,导致随机数重复。
以上是为什么 Go 中的随机数会重复以及我们如何解决它?的详细内容。更多信息请关注PHP中文网其他相关文章!