登录
首页 >  Golang >  Go教程

Golang使用math/rand生成随机数教程

时间:2026-01-28 22:03:42 498浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《Golang如何用math/rand生成随机数》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

在 Go 中需初始化随机源避免重复序列,Go 1.20 前用 rand.Seed(time.Now().UnixNano()),之后推荐 r := rand.New(rand.NewSource(time.Now().UnixNano()));再用 r.Intn(100)+1、r.Float64()*5.0、r.Intn(2)==0 分别生成 1–100 整数、0.0–5.0 浮点数和布尔值。

如何在Golang中使用math/rand生成随机数_创建随机数据

在 Go 中使用 math/rand 生成随机数,关键在于正确初始化随机数生成器(避免重复种子),并根据需求选择合适的随机方法。默认的全局随机源是确定性的,不加初始化会导致每次运行结果相同。

初始化随机源(避免固定序列)

Go 的 rand 包默认使用固定种子(如 1),所以必须显式设置种子才能获得真正“随机”的效果。推荐用当前时间纳秒值作为种子:

  • rand.Seed(time.Now().UnixNano()) —— 适用于简单场景(Go 1.20 之前必需)
  • Go 1.20+ 推荐使用独立的随机源:r := rand.New(rand.NewSource(time.Now().UnixNano())),避免污染全局状态

生成常见类型的随机数

使用 rand.Intn(n) 获取 [0, n) 范围内的整数;用 rand.Float64() 得到 [0.0, 1.0) 的浮点数:

  • 随机整数(例如 1–100):r.Intn(100) + 1
  • 随机浮点数(例如 0.0–5.0):r.Float64() * 5.0
  • 随机布尔值:r.Intn(2) == 0r.Float64()

生成随机字符串或字节切片

结合 rand.Intn() 和字符集可构造随机字符串:

  • 定义字母表(如大小写字母 + 数字):const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  • 逐位采样:letters[r.Intn(len(letters))],拼接成指定长度字符串
  • 更高效方式:预分配字节切片,用 r.Read()(需导入 crypto/rand)适合密码学安全场景,但 math/rand 不适用

生成结构化随机数据(如用户、订单)

组合基础随机方法即可模拟真实数据:

  • 姓名:从预设姓氏/名字列表中随机选取再拼接
  • ID:用 rand.Int63() 生成唯一长整型,或混入时间戳+随机后缀
  • 时间:用 time.Now().Add(-time.Hour * time.Duration(r.Int63n(24*30))) 生成过去一个月内的随机时间
  • 注意:若需并发安全,每个 goroutine 应使用自己的 *rand.Rand 实例,或加锁

不复杂但容易忽略——只要记得初始化种子、按需选方法、区分是否需要密码学安全,就能稳定生成符合预期的随机数据。

终于介绍完啦!小伙伴们,这篇关于《Golang使用math/rand生成随机数教程》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>