Golang如何使用math/rand生成随机数_Golang Rand随机数生成方法


正确使用math/rand需设置随机种子,如rand.Seed(time.Now().UnixNano()),以避免每次运行生成相同序列;它提供rand.Intn(n)、rand.Float64()等方法生成不同范围的随机数;在并发场景下应创建独立随机源或加锁保证安全;可通过字符集随机选取生成随机字符串,或用rand.Read()生成随机字节;适用于游戏、测试等非加密场景,加密需求应使用crypto/rand。

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

在Go语言中,math/rand 包提供了生成伪随机数的功能。虽然它不适合用于加密场景,但在一般应用如游戏、模拟、测试数据生成等场景下非常实用。正确使用 rand 的关键在于理解如何初始化随机数种子,避免每次运行程序时生成相同的“随机”序列。

设置随机种子(Seed)

如果不设置种子,math/rand 会默认使用固定的种子值,导致每次运行程序都生成相同的随机数序列。为了解决这个问题,需要使用当前时间作为种子。

例如:
  • 导入 "math/rand""time"
  • 调用 rand.Seed(time.Now().UnixNano()) 初始化随机数生成器

示例代码:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    rand.Seed(time.Now().UnixNano()) // 设置随机种子
    n := rand.Intn(100)              // 生成 0 到 99 之间的随机整数
    fmt.Println(n)
}

生成不同类型的随机数

math/rand 提供了多种方法来生成不同类型和范围的随机数:

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

  • rand.Int():返回一个正整范围内的随机整数(int 类型)
  • rand.Intn(n):返回 [0, n) 范围内的随机整数。例如 rand.Intn(10) 返回 0~9
  • rand.Float64():返回 [0.0, 1.0) 之间的随机浮点数
  • rand.NormFloat64():返回服从标准正态分布的浮点数

如果要生成指定范围的整数,比如 [a, b],可以这样写:

Text-To-Pokemon口袋妖怪 Text-To-Pokemon口袋妖怪

输入文本生成自己的Pokemon,还有各种选项来定制自己的口袋妖怪

Text-To-Pokemon口袋妖怪 1487 查看详情 Text-To-Pokemon口袋妖怪
num := a + rand.Intn(b-a+1)

并发安全与全局共享问题

默认的全局随机源(global source)不是并发安全的。如果在多个 goroutine 中同时调用 rand.Intn() 等函数,可能会出现竞态条件。

解决方法是使用 new(rand.Rand) 创建独立的随机源实例,或使用互斥锁保护。

推荐方式(并发安全):
var src = rand.NewSource(time.Now().UnixNano())
var r = rand.New(src)

// 在多个 goroutine 中使用 r.Intn()
func getRandom() int {
    return r.Intn(100)
}

生成随机字符串或字节

结合随机数,可以生成随机字符串。常见做法是定义字符集,然后从中随机选取字符。

func randomString(n int) string {
    const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    b := make([]byte, n)
    for i := range b {
        b[i] = letters[rand.Intn(len(letters))]
    }
    return string(b)
}

同样也可以用 rand.Read() 填充字节切片,生成随机二进制数据:

b := make([]byte, 10)
rand.Read(b)

基本上就这些。只要记得设置种子、注意并发安全、合理选择范围,就能在项目中高效使用 math/rand 生成所需随机数。对于更高安全要求的场景,请改用 crypto/rand

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


# 客户端  # 网站首页优化推荐工具  # 免费提供网站优化咨询  # 佛山顺德亲子网站建设  # 衡水哪里建设网站  # 沈阳哪个网站推广比较好  # 任城区全网seo公司  # 千牛营销和推广的区别  # 重庆陈勇seo  # 网站建设与seoppt  # 广州社群营销推广首选  # 如何在  # 浮点数  # 正态分布  # golang  # 不同类型  # 多个  # 自己的  # 如何使用  # crypto  # 解决方法  # unix  # ai  # 字节  # go语言  # go  # 随机数 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 解决J*aScript动态图片上传中ID重复问题:在同一页面显示多张独立图片  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  BunnyStream TUS视频上传指南:解决401认证错误与参数配置  钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】  电脑双系统如何安装和卸载 Windows和Linux双系统安装教程【详解】  byrutor直接访问入口 byrutor官方游戏库  实时数据流中高效查找最小值与最大值  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  在VS Code中利用AI辅助进行代码迁移  小米倒班助手添加日历提醒  如何取消数字签名  《图怪兽》退出登录方法  edge浏览器怎么修改语言为中文_Edge界面语言切换教程  惠普电脑BIOS界面看不懂怎么办_HP电脑BIOS功能选项解读与设置  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  抖音号怎么解除企业认证改成个人?改成个人有影响吗?  HTML中多图片上传与预览:解决ID冲突的专业指南  126邮箱申请入口官网_126邮箱注册免费登录2025  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】  J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析  c++如何使用std::thread::join和detach_c++线程生命周期管理  微信步数怎么刷_微信步数快速提升技巧  小米手机屏幕失灵乱跳怎么办 屏幕触控问题自检与临时解决方法【应急】  基于键值条件高效映射 Pandas DataFrame 多列数据  汽水音乐车机版 汽水音乐车机版官方入口  win11如何开启单声道音频 Win11为听障用户合并左右声道【辅助】  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  qq音乐官方网站入口_qq音乐在线听歌网页版链接  Python中深度嵌套字典与列表的数据提取与条件过滤指南  SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤  VB表达式书写规则解析  顺丰速运官网查询入口 顺丰物流查询官网入口链接  铁路12306怎么申请退票_铁路12306退票申请操作流程  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】  win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】  菜鸟驿站的取件码忘了怎么办 手机快速查询指南  《鹿路通》退余额方法  Go Template中优雅处理循环最后一项:自定义函数实践  QQ网站入口直接登录 QQ官方正版登录页面  sublime如何处理超大文件不卡顿 _sublime打开大日志文件技巧  铁路12306官网登录入口 铁路12306在线购票官方平台  C#解析来自网络的XML流数据 实时错误处理与重试机制  J*aScript事件处理:优化键盘输入与表单提交的实践指南  4399小游戏下装链接 4399小游戏下载链接入口  使用VS Code调试Python代码:从入门到精通  PDF文件去水印平台入口 PDF水印删除网址 

 2025-12-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.