Golang的随机数生成注意事项

本文介绍了Go语言中使用math/rand包生成随机数的方法,特别是Intn函数用于生成[0,n)范围内的整数。通过示例展示了如果不设置种子,连续运行程序将得到相同的“伪随机数”。为确保每次运行得到不同的随机数,需要使用rand.Seed设置种子,通常采用当前纳秒时间戳作为种子值,以实现真正的随机性。不设置种子并不意味着总是生成0,而是生成一系列可预测的序列。
摘要由CSDN通过智能技术生成

Golang的随机数生成注意事项

以整数为例,golang的随机数生成用的是math包里的rand包的Intn(n int)函数
,传入一个整数便可得到一个随机的从 [0,n) 的结果。
在这里插入图片描述
但,随机数的生成经常伴随着“种子”之类的说法,其实这要看自己的需求来决定是用还是不用。

就像上面的图片展示的一样,其实可以不用也能生成随机数,但是看图中右侧控制台的输出,其实我运行了两遍,发现两次的结果是一样,这就成为了人们俗称的 “伪随机数”

若想每次得到的结果都不一样,那么就需要设置好种子。关于”种子“这名字的起源与来龙去脉,我没有过多了解。

种子的设置仍然在rand包中,使用seed函数即可。用法如下图所示
在这里插入图片描述

可以清楚地看到,每次运行结果和上次的都不一样。这就实现了真正意义上的随机数生成,其中种子值的设置,用到了纳秒时间戳,也可以只传入时间戳,这个数字每一纳秒或者秒 都在变化,呈现出不确定性,所以种子也会变化,最后生成的值也会变化。

辟谣:不用种子并不是像某些文章或者网上的回答所说的那样,每次都生成0,只是会生成伪随机数而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值