首页 > 后端开发 > Golang > 正文

为什么 Go 中的 rand.Intn() 每次都会生成相同的数字?

Susan Sarandon
发布: 2024-10-30 13:25:02
原创
540 人浏览过

Why Does `rand.Intn()` in Go Generate the Same Number Every Time?

理解 Go 的 rand.Intn() 中相同的随机数生成

为什么 rand.Intn() 始终生成相同的随机数?对于使用 Go 的初学者来说,由于以下代码,经常会出现这个问题:

<code class="go">package main

import (
    "fmt"
    "math/rand"
)

func main() {
    fmt.Println(rand.Intn(10)) 
}</code>
登录后复制

尽管文档声称提供 [0, n) 范围内的伪随机数,但程序每次都会打印相同的数字

播种随机数生成

关键在于正确播种随机数生成器。默认行为是使用确定性种子,从而在程序执行过程中产生相同的数字序列。要纠正这个问题:

<code class="go">rand.Seed(time.Now().UnixNano())</code>
登录后复制

此函数使用基于当前 Unix 时间戳的种子初始化随机数生成器。它确保每次运行都有不同的数字序列。

理解文档

rand.Intn() 的文档指出:“顶级函数......每次运行程序时都会产生确定性的值序列。”因此,如果没有显式播种,生成器的行为就好像播种了 1,从而产生可预测的结果。

结论

通过在使用 rand.Intn 之前播种随机数生成器(),您可以克服重复随机数的问题,确保正确生成非确定性序列。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!