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

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

P粉602998670
发布: 2025-12-16 18:27:57
原创
617人浏览过
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 还提供多种基础类型支持:

达芬奇
达芬奇

达芬奇——你的AI创作大师

达芬奇 166
查看详情 达芬奇

立即学习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生成方法说明的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号