新闻中心

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

2025-12-08
浏览次数:
返回列表
Go 1.20+ 应使用 rand.New(rand.NewSource(seed)) 创建独立 *rand.Rand 实例,避免弃用的 rand.Seed() 和不安全的全局函数;种子需显式设置(如 time.Now().UnixNano() 或固定值 42),并发安全但推荐按需隔离实例以保障可重现性与性能。

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

Go 语言中 math/rand 包提供了生成伪随机数的能力,但要注意:它默认不加密、不安全,适合一般用途(如游戏、模拟、测试),**不适用于密码学场景**。关键点是——必须显式设置种子(rand.Seed()),否则每次运行都产生相同序列;Go 1.20+ 推荐直接使用 rand.New(rand.NewSource()) 方式避免全局状态干扰。

初始化随机数生成器(推荐方式)

Go 1.20 起,rand.Seed() 已被弃用,应使用独立的 *rand.Rand 实例:

  • 用当前纳秒时间作为种子:rand.New(rand.NewSource(time.Now().UnixNano()))
  • 若需可复现结果(如单元测试),可用固定数字:rand.New(rand.NewSource(42))
  • 避免使用全局 rand.* 函数(如 rand.Intn()),它们共享同一个全局生成器,多 goroutine 并发调用可能有竞态

生成常见类型的随机数

调用实例方法比全局函数更安全、更可控:

  • 随机整数(0 到 n-1):r.Intn(100) → 0~99 的 int
  • 随机整数范围([min, max] 闭区间):min + r.Intn(max-min+1)
  • 随机浮点数 [0.0, 1.0):r.Float64();扩展为 [a, b):a + r.Float64()*(b-a)
  • 随机布尔值:r.Intn(2) == 0 或封装为 r.Int63()%2 == 0

从切片中随机取元素或打乱顺序

利用 rand.Shuffle() 安全高效地洗牌(原地修改):

AdMaker AI AdMaker AI

从0到爆款高转化AI广告生成器

AdMaker AI 65 查看详情 AdMaker AI
  • 打乱切片:r.Shuffle(len(slice), func(i, j int) { slice[i], slice[j] = slice[j], slice[i] })
  • 随机取一个:slice[r.Intn(len(slice))]
  • 随机取多个不重复项:先 Shuffle,再取前 N 个(比多次 Intn + 去重更高效)

注意并发与可重现性

多个 goroutine 同时用同一个 *rand.Rand 实例是安全的(内部已加锁),但若追求极致性能,可为每个 goroutine 分配独立实例;若需完全可重现(比如压测、回放),务必固定种子且避免依赖系统时间。

基本上就这些。不复杂但容易忽略种子和实例隔离,写对了就能稳定又灵活地用起来。

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


# golang  # 营销推广和品牌宣发关系  # 兴化建筑网站建设  # 杭州企业站seo报价  # 丽水seo优化厂家  # 嘉陵区营销推广中心电话  # unny的营销推广  # seo搜索排名查询  # 相关文章  # 已被  # 就能  # 若需  # 检测方法  # 不安全  # 布尔  # 多个  # 如何使用  # 随机数  # unix  # go  # 搜索引擎与网站优化技术  # 滁州网络推广新闻营销  # 起名网seo源码 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 微信网页版扫码登录入口 微信网页版二维码登录入口  vivo云服务网页版登录 怎么登录vivo云服务网页版  怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】  使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性  《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元  优化Log4j2控制台输出性能:解决异步日志瓶颈  高德地图公交到站提醒失败如何解决 高德提醒权限设置  Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation  微博网页版主页入口 微博官方网站免登录访问  c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学  C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果  深入理解Promise链:如何在catch后中断then的执行  Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】  c++如何实现单例设计模式_c++线程安全的单例模式写法  Yandex浏览器官方网页版入口 Yandex浏览器最新版官网  Linux如何构建多环境配置管理_Linux多环境配置方案  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  在Socket.IO连接中实现Access Token自动更新与动态重连  蛙漫安全无毒 官方认证的绿色入口  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  J*aScript生成器_j*ascript异步迭代  快手网页版在线登录 快手网页版官网入口快速访问  响应式图片在网页设计中的正确实现方法  一加 14R 快充无反应_一加 14R 充电优化  高德地图沿途添加点失败如何解决 高德多点规划方法  Python多版本共存与虚拟环境管理深度指南  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  Composer如何解决json扩展缺失的错误  整合Supabase认证与Django模型:跨模式迁移的解决方案  b站怎么删除评论_b站评论管理与删除操作  在python-socketio事件处理器中安全访问Flask应用上下文  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?  外媒分析《GTA6》定价:卖100美元可以但真没必要!  拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件  如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】  C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比  Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践  必由学网页版入口 必由学官方平台直接访问  sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE  CSS Grid如何控制元素对齐_align-items与justify-items组合使用 

搜索