Go生成随机数需设种子,否则结果固定;安全场景须用crypto/rand。math/rand需初始化种子,1.20+推荐rand.New(rand.NewSource(time.Now().UnixNano())),Intn(n)生成[0,n),闭区间[a,b]用a+r.Intn(b-a+1),浮点数用Float32/64,安全敏感场景禁用math/rand。

Go 语言中生成随机数主要靠 math/rand 包,但要注意:它默认不带真随机性,需手动设置种子(seed),否则每次运行结果都一样。
在 Go 1.20 之前,需要用 rand.Seed() 设置随机种子;1.20+ 版本推荐使用 rand.New(rand.NewSource()) 的方式,避免全局状态干扰。
rand.Seed(time.Now().UnixNano())
r := rand.New(rand.NewSource(time.Now().UnixNano())),后续用 r.Intn(100) 等方法最常用的是 Intn(n),返回 [0, n) 范围内的随机整数(不含 n)。
r.Intn(10) 得到 0~9 的整数a + r.Intn(b-a+1)
5 + r.Intn(11)
rand 还提供多种基础类型支持:
立即学习“go语言免费学习笔记(深入)”;
r.Float32():返回 [0.0, 1.0) 的 float32r.Float64():返回 [0.0, 1.0) 的 float64r.Int():返回 int 范围内的随机整数(注意可能溢出)0.5 + r.Float64()*2.0
如果用于密码、token、加密密钥等安全敏感场景,math/rand 不够安全 —— 它是伪随机,可预测。
crypto/rand 包crypto/rand.Int(rand.Reader, big.NewInt(100)) 生成安全随机整数crypto/rand 性能较低,日常逻辑、游戏、测试用 math/rand 就够了基本上就这些。关键就两点:记得设种子,安全场景换 crypto/rand。
以上就是如何使用Golang生成随机数_Golang math Rand生成方法说明的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号