烟台网站建设加企汇互联专业,登錄wordpress界面,9元建站节,intitle 无线网站制作伪随机数生成器#xff0c;默认情况下随机数种子是固定的#xff0c;
**注意#xff1a;**固定的随机数种子每次生成的随机数都是相同的随机数序列
一、基础用法
math/rand 包提供了随机数生成的方法。常用的函数包括#xff1a;
rand.Int()#xff1a;返回一个伪随机…伪随机数生成器默认情况下随机数种子是固定的
**注意**固定的随机数种子每次生成的随机数都是相同的随机数序列
一、基础用法
math/rand 包提供了随机数生成的方法。常用的函数包括
rand.Int()返回一个伪随机整数rand.Float64()返回一个伪随机浮点数范围是 [0.0, 1.0)rand.Intn(n)返回一个伪随机整数范围是 [0, n)
二、随机种子
默认情况下math/rand使用一个固定的种子值会生成相同的随机数序列生成不同的随机数序列需要设置一个动态的随机数种子例如当前使用时间。
1. rand.seed() 初始化默认的全局随机数生成器 作用范围修改全局随机数生成器的种子 优点简单直接 缺点不适用于多线程全局状态会被竞争 package mainimport (fmtmath/randtime
)func main() {// 使用当前时间戳设置种子纳秒级rand.Seed(time.Now().UnixNano())// 生成随机数fmt.Println(Random Int:, rand.Int())fmt.Println(Random Intn(10):, rand.Intn(10))
}2. rand.NewSource() 创建一个新的随机数生成器源Source,通过 rand.New 基于此 Source创建一个独立的随机数生成器 优点线程安全可创建多个独立生成器 缺点需要额外配置 使用年月日就可以设置/当年/当月/当天生成相同的随机数值比如:
package mainimport (fmtmath/randtime
)func main() {seed : int64(time.Now().Day())source : rand.NewSource(seed)r : rand.New(source)num : r.Int63n(100)fmt.Println(随机整数:, num)
}由此还可以演变出组合比如把时分秒按照固定比率放大累加后就可设置当前时间或者分钟内生成相同的随机数序列
3. 注意
生成的随机数如果随机数种子设置的类似他的图形波动曲线会类似设置可能会无限趋近于一条直线