首页  >  文章  >  后端开发  >  为什么 Go 中的随机数会重复以及我们如何解决它?

为什么 Go 中的随机数会重复以及我们如何解决它?

Linda Hamilton
Linda Hamilton原创
2024-10-25 09:14:02900浏览

Why Do Random Numbers Repeat in Go and How Can We Fix it?

解决 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中文网其他相关文章!

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