新闻中心
如何使用Golang math/rand生成随机数_Golang math/rand随机方法实践
Go 1.20+ 应使用 rand.New(rand.NewSource(seed)) 创建独立 *rand.Rand 实例,避免弃用的 rand.Seed() 和不安全的全局函数;种子需显式设置(如 time.Now().UnixNano() 或固定值 42),并发安全但推荐按需隔离实例以保障可重现性与性能。

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
从0到爆款高转化AI广告生成器
65
查看详情
- 打乱切片:
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组合使用


2025-12-08
浏览次数:次
返回列表