登录
首页 >  Golang >  Go教程

Golang随机数生成技巧与方法

时间:2026-04-29 22:42:48 261浏览 收藏

本文深入解析了Go语言中随机数生成的核心要点:既要掌握math/rand包的正确用法——包括必须初始化种子(1.20+推荐使用rand.New(rand.NewSource(time.Now().UnixNano()))避免全局状态污染)、灵活生成指定范围整数和浮点数,又要清醒认识到其伪随机本质——在密码、Token等安全敏感场景下必须切换至crypto/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 还提供多种基础类型支持:

  • 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学习网公众号,给大家分享更多Golang知识!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>