惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
N
News and Events Feed by Topic
S
Schneier on Security
G
GRAHAM CLULEY
Scott Helme
Scott Helme
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
CERT Recently Published Vulnerability Notes
T
The Exploit Database - CXSecurity.com
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
Blog — PlanetScale
Blog — PlanetScale
Project Zero
Project Zero
MyScale Blog
MyScale Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
The Last Watchdog
The Last Watchdog
Vercel News
Vercel News
The Cloudflare Blog
C
Check Point Blog
Help Net Security
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
腾讯CDC
NISL@THU
NISL@THU
S
Security @ Cisco Blogs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
AWS News Blog
AWS News Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
PCI Perspectives
PCI Perspectives
S
Securelist
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Vulnerabilities – Threatpost
S
Secure Thoughts

Tony Bai

偿还十年技术债:深度拆解 Go 1.27 的 GODEBUG 强力清理计划 Go 1.27新特性前瞻:泛型方法落地,标准库内建 UUID - Tony Bai AI 正在撕裂研发团队:狂欢的“托管派”与心碎的“守夜人” - Tony Bai 屠榜 CNCF!为什么在云原生时代,Go 语言能把 Java、C++ 和 Rust 堵在门外? 上千程序员自爆 AI 的“卧槽时刻”:是推开神界大门,还是跌入黑盒地狱? - Tony Bai 大模型正在见顶!传奇架构师:欢迎来到“平坦曲线时代” - Tony Bai Anthropic 40万大样本揭秘:AI 时代为什么“专家”身价暴涨? - Tony Bai 在 AI 编码时代,为什么我们依然选择 Go 而不是 Rust? DeepMind 亮出王炸:别再手写 Agent Harness 了,AI 已经学会自己写了! 为什么说“编译通过,就能运行”?Google 专家 Alice 揭秘 Rust 的工程美学与底层逻辑 谷歌 SRE 重磅白皮书:当 AI 自动写出 10 倍代码,谁来阻止系统崩溃? 别再省 Token 了!硅谷新共识:浪费算力才是唯一捷径 - Tony Bai Linux 内核顶级维护者:写了 35 年 C,是 Rust 让我重新找回了编程的乐趣 拒领上亿、封杀 AI:Zig 之父为什么 10 年不发 1.0? 写地道的 Go 语言,是否能让你成为了一个更好的开发者? - Tony Bai RSA 将死?Let’s Encrypt 押注 MTCs 迎战后量子时代 C++ 的权力游戏:一部关于妥协、背叛与重生的“史诗神剧” - Tony Bai 终结十年纠结:Go 新提案允许 Example 支持任意函数签名 - Tony Bai 2026年,大厂重构核心系统为何集体投向 Go? - Tony Bai “辛辛苦苦考上985,却发现AI能替代我90%的工作”:今天的高考,我们还在为什么而战? - Tony Bai 传奇黑客 Geohot 炮轰 AI Agent:这是软件工程史上代价最昂贵的灾难! 别把 Go 写成 Java:毁掉项目从过度架构开始 - Tony Bai 开源维护者的困境 - Tony Bai AI 时代如何真正掌握一门新技术?这份非主流学习指南建议永久收藏 - Tony Bai Go 生态17年大浪淘沙:2026年最值得引入的10个“神仙级”QoL工具包 - Tony Bai 再见样板代码!Go 官方新提案:函数一键转接口 - Tony Bai 写代码快 10 倍,不等于研发快 10 倍!Google 揭秘 AI 系统级瓶颈 Google I/O 2026:Jeff Dean 携 DeepMind 众神宣告,AI Agent 正在终结“标准化软件”时代 AI 优化 1.5ms,手写 0.02ms!Ghostty 作者痛批 AI 编程“平庸陷阱” Redis 之父吐槽现代前端的复杂性:我们到底是在解决问题,还是在制造问题? - Tony Bai 无痛消灭技术债:Google I/O 2026 开启 Go 自动重构时代 省下 10% CPU!Uber 揭秘 Go 栈扩容的隐秘代价 从 Go 迁移到 Rust - Tony Bai 悄悄用 Go 重写 AI 基础设施:NVIDIA 的 GPU 云平台为何选择 Go? Shopify 23,000 名工程师背后的 Claude Code 配置方案(你可以直接复刻的完整配置) Google 开源 AX 与 Agent Substrate:构建以 Agent 为核心的云原生计算底座 十年难题终获突破:揭秘 Go 1.27 接口逃逸分析优化 - Tony Bai 大洗牌!Google 内部确认:Go 正取代 C++,成为 AI Agent 时代的“通用语言” AI 编码胜率榜:Go 与 Rust 完胜 C++ 代码可以让 AI 写,但设计得由你做:重塑工程师的“算法直觉” - Tony Bai 别神话 Rust 重写了:搞定1%热路径,Go 性能照样起飞 - Tony Bai 如何在大型代码库中运用 Claude Code:最佳实践及入门指南 - Tony Bai 写了 10 年 Java/TS,Go 语言终于治好了我的“过度设计”绝症 AI 时代,软件大师们为什么都倒戈向 Go 和 Rust 了? 别再瞎写 go.mod 了!一行 go 1.xx,竟藏着 7 个足以颠覆你认知的“秘密开关” 谁说 Rust 在中国火了?扒开 2025 全年数据,我看到了令人尴尬的真相 “用 Go 打天下,用 Rust 救火”:这才是 2026 年后端架构的唯一正解 对话 Uber 前 CTO:我如何用 5000 个微服务驯服这头失控的巨兽 Anthropic 工程师发文:别用 Markdown 了,HTML 才是 AI 的终极语言! 火爆外网的 Go 开源神器 CLI Printing Press:一键生成 Agent 专属 CLI 工具 Bun 创始人带头“叛逃”:放弃 Zig,用 AI 把项目重写成 Rust? AWS 大神发文炮轰:Go 的并发就是个“笑话”,JVM 的方案要更优越 - Tony Bai Robert Griesemer 亲述:只解决 90% 问题的“箭头函数”该长什么样? “AI 让每个人都成了开发者”,就像“相机让每个人都成了摄影师” - Tony Bai AI 正在把我们推向“双输”深渊:顶级论文揭示“AI 裁员陷阱” - Tony Bai “AI 正在用垃圾代码摧毁一切!”:Flask 之父对话 Pi 作者,揭开 AI 编程的残酷真相 从“Vibe-Coding”到“Agentic Engineering”:Andrej Karpathy 的 AI 时代程序员生存法则 开源社区“内战”爆发:Bun 创始人预言“未来将禁止人类贡献”,硅谷大佬纷纷站队! - Tony Bai Ghostty 之父带头“出走”GitHub!官方 CTO 紧急道歉,并揭秘正在使用 Go 语言救火 Go 1.27 将默认开启 SIMD for amd64,可移植 SIMD 包提案出炉 Go 语言“内战”迎来终局?Go 圣经作者亲自下场,为“三元运算符”发起折中提案! - Tony Bai “我们想用 Rust 重写的次数是:零”:云平台 Render 靠“无聊”的 Go 撑起了千亿流量 对话 Martin Kleppmann:DDIA 第二版揭秘,以及 AI 将如何颠覆分布式系统 为什么人人爱 Rust,但 RedMonk 榜单却给它泼了一盆冷水? - Tony Bai Go 代码设计的“第一天原则”:一份能让你少走五年弯路的实战模式清单 - Tony Bai HashiCorp 创始人亲口“认错”:AI 让我重新爱上了 Go (文末福利) 聊聊为什么我要花这么大精力,带大家手写 Agent Harness? - Tony Bai “我把公司卖了,却感觉一无所有”:OpenClaw 之父 TED 亲述如何靠 AI 重获新生 薄驾驭,厚技能:YC 掌门人揭秘拉开 1000 倍效率差距的 AI 工程化心法 从“开源英雄”到“社区公敌”,Ollama 到底做错了什么? - Tony Bai GPU 计算的起源 - Tony Bai Rust 还没进前十,TIOBE 就开始唱衰了? - Tony Bai 为什么说 go 语句是新时代的 goto?四大法则拯救失控 goroutine C++ 社区内部大讨论:新特性到底是“生产力革命”,还是“叠加的复杂性”? - Tony Bai 别再无脑 go func() 了!Go 资深布道师 Dave Cheney 的 Goroutine 管理哲学 AI 时代,敏捷宣言已死?听听 Martin Fowler 和 Kent Beck 怎么说 Go Command 工作组成立:这几个用了十年的命令可能要被废! - Tony Bai Ruby on Rails 之父最新访谈:AI 正在推高顶尖程序员的身价 别搞“小而美”了!Rust 开发者请愿:求求标准库学学 Go 吧 - Tony Bai 倒计时 33 个月?Go 前安全负责人:量子计算机将“摧毁”互联网 - Tony Bai 从 1960 到 2026:一文看透 Java、Go、Python 垃圾回收器的原理与演进 AI 编程时代,我挖出了一本 1999 年的“删库跑路”指南 - Tony Bai 当AI 榨干了编程所有的乐趣:我不再是程序员,而是“Claude Code”的项目经理 - Tony Bai REST 已老,AI 时代的智能体需要怎样的 API? - Tony Bai 2026 编程语言“饱和度”榜单出炉:JavaScript/Python 已“烂大街”,Go/Rust 成最大赢家? - Tony Bai 一天重写 JSONata,我用 400 美元干掉了公司 50 万美元的 K8s 集群
浏览器里的“安全阴谋”:为什么 Go 1.27 的 UUIDv7 会离奇丧失随机性?
bigwhite · 2026-06-25 · via Tony Bai

本文永久链接 – https://tonybai.com/2026/06/25/go-1-27-uuid-newv7-always-generates-uuid-with-7000-on-browsers

大家好,我是Tony Bai。

在刚刚发布第一个候选版本(RC1)的 Go 1.27 中,一个让开发者感到贴心的特性升级,莫过于标准库终于原生内建了 uuid 包。我们终于可以告别第三方依赖,用最地道、最安全的方式在标准库里生成高并发、时间有序的 UUIDv7

然而,新包刚上新,一桩诡异的“灵异事件”就在 WebAssembly(WASM)和浏览器生态中传开了。

知名 Go 游戏引擎 Ebitengine 的创造者 hajimehoshi 在测试 Go 1.27rc1 时,提交了一个 Bug(Issue #80084):

当他在浏览器环境(GOOS=js GOARCH=wasm)下调用 Go 1.27 新标准库的 uuid.NewV7() 时,生成的 UUID 居然极度规律。在代表随机数和亚毫秒时间戳的第三组字符中,无论运行多少次,永远雷打不动地包含“7000”!

  • 019ee60f-29b3-7000-a12b-f817e25db8f4
  • 019ee610-29c7-7000-bc34-f04bc09150bb
  • 019ee610-2eb4-7000-884a-dfcad78e47d9

原本应该提供高强度碰撞防护的 12 位随机熵值,在浏览器里竟然离奇缩水、变成了死板的零(000)。

这究竟是 Go 标准库的设计失误,还是底层操作系统与浏览器之间展开的一场“安全阴谋”?在这篇文章中,我们一起来探索和解读一下。

破译密码学结构:什么是 UUIDv7 与 7000 幽灵?

要看懂这个 Bug,我们首先需要拆解一下 UUIDv7(RFC 9562 的底层二进制结构。

相比于我们常用的、纯随机的 UUIDv4,UUIDv7 最大的优势在于“时间有序性”。它将时间戳放在高位,使其能够像数据库自增主键一样对索引极度友好。

它的 128 位二进制排布如下:

  • unix_ts_ms (48位):自 Unix 纪元以来的毫秒级时间戳。
  • ver (4位):版本号。对于 UUIDv7,这里永远是二进制的 0111(即十六进制的 7)。
  • rand_a (12位):在标准的定义中,这 12 位可以用来存放亚毫秒级(微秒/纳秒)的高精度时间分数,或者用来充当单毫秒内的单调递增计数器。
  • rand_b (62位):纯粹的加密安全随机数。

在 Go 1.27 的标准实现中,为了提供极致的精确度和排序性,编译器采取了一种非常优雅的混合设计(RFC 9562 推荐的 Method 3):

它会获取系统的纳秒级高精度时间,把前 48 位(毫秒)放进 unix_ts_ms,把剩下的 12 位亚毫秒级高精度时间,直接塞进紧随其后的 rand_a 字段中。

因此,在正常的高精度系统上,第三组字符的第一个字母永远是代表版本的 7,而随后的三个十六进制字符则是随机变化的亚毫秒时间戳(如 7164、7008 等)。

但在浏览器(WASM)中运行这段 Go 代码时,由于系统的亚毫秒级高精度时间全部归零,rand_a 的 12 位数据彻底退化为了 000

它与版本号 7 拼在了一起,便诞生了那个雷打不动的“7000”幽灵。

浏览器的“防自卫反击”:Spectre、熔断与被阉割的时钟

为什么在浏览器里,Go 拿不到亚毫秒级的高精度时间?

这背后,其实是浏览器厂商为了对抗物理芯片漏洞,进行的一场长达数年的安全防御战争。

2018 年,现代处理器设计中最著名的硬件漏洞——Spectre(幽灵)和 Meltdown(熔断)爆发。这些漏洞利用了 CPU 的分支预测和缓存旁路分析,能让恶意网页读取到内存中受保护的敏感数据(包括其他网页的 Cookie、密码等)。

而此类高深、精密的侧信道攻击(Side-channel attacks),极度依赖于微秒级、乃至纳秒级的超高精度系统时钟。 攻击者需要通过精确测量 CPU 缓存读取的时间差,来推算内存中的数据。

为了彻底掐断攻击者的温床,各大浏览器巨头(Mozilla、Google、Apple)联手做出了一个残忍但必须的决定:在浏览器沙箱中,人工、强制地削弱并阉割所有 JavaScript 高精度时钟的精确度!

  • 浏览器里的 performance.now() 和 Date.now() 被强制进行了四舍五入。
  • 例如在 Firefox 中,默认情况下时钟精度被限制在 2ms。如果用户开启了防指纹追踪(Resist Fingerprinting)安全设置,精度甚至会被直接阉割到 100ms

当 Go 1.27 编译为 WASM 运行在浏览器中时,其底层的 time.Now() 最终只能去向浏览器的宿主环境(JavaScript)索要时间。

面对被浏览器安全策略阉割到毫秒甚至百毫秒级的残缺时钟,Go 编译器拼命想读取底层的纳秒数据,但读出来的永远只是冷酷的“0”。

隐藏的危机:丧失 12 位熵值的碰撞深渊

“虽然多出了 7000 看起来有点丑,但它依然是合规的 UUID,这有什么大不了的?”

如果你抱着这样的想法,那就低估了分布式系统设计的残酷性。

在单毫秒的极短时间内,如果我们并发生成了大量的 UUID(例如在 Cloudflare Workers 这样的边缘无服务器环境,或者高并发的 WASM 网页应用中):

  • 在正常系统上,我们有 12 位的 rand_a 亚毫秒高精度做保护,保证了单毫秒内极难发生碰撞;
  • 但在浏览器里,由于 rand_a 恒定为 000,我们瞬间丢失了 12 位的密码学熵(Entropy)!

这导致 UUIDv7 的实际随机保护带,从标准的 74 位直接缩水到了 62 位。在高并发、分布式生成场景下,这会导致碰撞(Collision)的概率呈指数级上升! 在金融交易、分布式主键或敏感会话管理中,这是完全不可接受的安全性崩溃。

Go团队的系统级解法

面对这个在开发阶段难以预料的“环境坑”,Go 团队的工程师 neild 与社区展开了积极的方案讨论和验证。

如何既不损害系统性能,又能完美补全这 12 位丢失的随机能量?

在最新的合并讨论中,Go 团队达成了一套极其务实的优雅解法(CL 792820):

  1. 不进行昂贵的硬件检测:有人提出通过在循环中调用 time.Now() 来动态测量当前系统的时钟精度。但这太重了,会极大地拖慢 NewV7() 的生成效率。
  2. 优雅降级与随机补全:当检测到当前系统的 wallclock 精度不足以填满 rand_a 的 12 位亚毫秒空间时(或者直接针对 GOOS=js 平台),Go 运行时会直接退回到备用方案——用真正的、通过 crypto/rand 产生的物理随机安全比特,去填满 rand_a 丢失的那 12 位空缺。
  3. 单毫秒内的单调递增(Monotonicity):在补全随机性的同时,如果系统在同一毫秒内产生了极高频的并发调用,AX 依然会使用 12 位作为计数器(Counter)进行累加,确保在高并发下的绝对单调递增和排序性。

通过这套巧妙的自适应补全设计,Go 1.27 不仅完美规避了浏览器的“安全阴谋”,更在系统最底层的设计上,为未来的 WebAssembly 和边缘计算(Edge Computing)开发者筑起了一道安全护城河。

小结

写好一段标准库级别的系统代码,从来都不是在真空中进行的。

Go 1.27 标准库 uuid 的这场“7000”幽灵风波,向我们揭示了现代高级软件工程最迷人的魅力:一个看起来再普通不过的基础库函数,其底层设计居然需要穿透编译器的类型系统、直接触碰到 CPU 硬件级安全漏洞(Spectre)以及浏览器的多沙箱防御边界。

大模型或许能帮你快速写出几行能运行的代码,但这种对多层系统级协作、硬件侧信道攻击以及跨环境兼容性的深度洞察和架构重塑,依然只能依靠人类最顶尖的系统级软件工匠去雕琢。

资料链接:https://github.com/golang/go/issues/80084


今日开放讨论:

你目前在项目中使用的是哪个版本的 UUID(v4、v5 还是 v7)?在面对诸如浏览器时钟阉割、硬件漏洞等不可控的系统运行环境变化时,你们的底层系统是如何进行防范和优雅降级的?

欢迎在评论区留下你最硬核的系统级见解,我们一起在评论区深度交流!


还在为写 Agent 框架频频死循环、上下文爆炸而束手无策?我的新专栏 从0 开始构建 Agent Harness 将带你:

  • 抛弃臃肿框架,回归“驾驭工程 (Harness Engineering)”的第一性原理
  • 用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等,复刻极简OpenClaw
  • 构建坚不可摧的 Safety Middleware 与飞书人工审批防线
  • 在底层实现 Token 成本审计、链路追踪与自动化跑分评估
  • 从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”

扫描下方二维码,开启从 0 开始构建Agent Harness 的实战之旅。


原「Gopher部落」已重装升级为「Go & AI 精进营」知识星球,快来加入星球,开启你的技术跃迁之旅吧!

我们致力于打造一个高品质的 Go 语言深度学习AI 应用探索 平台。在这里,你将获得:

  • 体系化 Go 核心进阶内容: 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏,夯实你的 Go 内功。
  • 前沿 Go+AI 实战赋能: 紧跟时代步伐,学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等,掌握 AI 时代新技能。
  • 星主 Tony Bai 亲自答疑: 遇到难题?星主第一时间为你深度解析,扫清学习障碍。
  • 高活跃 Gopher 交流圈: 与众多优秀 Gopher 分享心得、讨论技术,碰撞思想火花。
  • 独家资源与内容首发: 技术文章、课程更新、精选资源,第一时间触达。

衷心希望「Go & AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚,享受技术精进的快乐!欢迎你的加入!

img{512x368}


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

© 2026, bigwhite. 版权所有.

Related posts:

  1. 告别 google/uuid:Go 标准库拟新增 crypto/uuid 深度解析
  2. Go 1.27新特性前瞻:泛型方法落地,标准库内建 UUID
  3. Go 1.20中值得关注的几个变化
  4. Google I/O 2025 Go 语言进展:生产力、生产就绪与 AI 赋能
  5. 写Go代码时遇到的那些问题[第3期]