如何使用Golang生成随机数_Golang math Rand生成方法说明

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。

如何使用golang生成随机数_golang math rand生成方法说明

Go 语言中生成随机数主要靠 math/rand 包,但要注意:它默认不带真随机性,需手动设置种子(seed),否则每次运行结果都一样。

初始化 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, b] 闭区间整数?写成 a + r.Intn(b-a+1) 例如:[5, 15] → 5 + r.Intn(11)

生成浮点数和其它类型

rand 还提供多种基础类型支持:

立即学习“go语言免费学习笔记(深入)”;

r.Float32():返回 [0.0, 1.0) 的 float32 r.Float64():返回 [0.0, 1.0) 的 float64 r.Int():返回 int 范围内的随机整数(注意可能溢出) 想生成 [0.5, 2.5) 的 float64?用 0.5 + r.Float64()*2.0

安全场景别用 math/rand

如果用于密码、token、加密密钥等安全敏感场景,math/rand 不够安全 —— 它是伪随机,可预测。

应改用 crypto/rand 包 例如:crypto/rand.Int(rand.Reader, big.NewInt(100)) 生成安全随机整数 注意:crypto/rand 性能较低,日常逻辑、游戏、测试用 math/rand 就够了

基本上就这些。关键就两点:记得设种子,安全场景换 crypto/rand。

以上就是如何使用Golang生成随机数_Golang math Rand生成方法说明的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1428723.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 01:19:45
下一篇 2025年12月17日 01:20:03

相关推荐

发表回复

登录后才能评论
关注微信