别再轻信 GitHub 上的源码:为何我们需要全新的 Go 模块审查机制?

本文永久链接 – https://tonybai.com/2026/02/20/why-we-need-new-go-module-review-mechanism 大家好,我是Tony Bai。 你以为你在 GitHub 上看到的代码,就是你的 Go 程序编译时使用的代码吗?答案可能令你背脊发凉。 在 Go 语言的生态系统中,我们一直引以为傲的是其卓越的包管理和安全性。Go Checksum Database(校验和数据库)被公认为现代编程语言中最强大的完整性保障机制之一。然而,前 Go 安全团队负责人、著名的密码学家 Filippo Valsorda 在最近的一篇文章中揭示了一个令人不安的真相:虽然 Go 的工具链是安全的,但我们人类审查代码的方式却存在巨大的安全漏洞。 ...

February 20, 2026 · 8 min · Tony Bai

谁才是 Go 生态的“幕后之王”?—— 深度挖掘 4000 万个节点后的惊人发现

谁才是 Go 生态的“幕后之王”?—— 深度挖掘 4000 万个节点后的惊人发现 - Tony Bai Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

January 9, 2026 · 5 min · Tony Bai

Go 模块构建与依赖管理:我们到底在“折腾”什么?

Go 模块构建与依赖管理:我们到底在“折腾”什么? - Tony Bai Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ ...

October 27, 2025 · 5 min · Tony Bai

Go Proxy的“背景刷新”机制,是优化还是“DDoS”?一次社区事件引发的深度复盘

本文永久链接 – https://tonybai.com/2025/09/05/go-proxy-revise-background-refresh-pacing 大家好,我是Tony Bai。 2025年8月14日,Go开发者Ted Unangst发表了一篇措辞犀利的博文——《What is the go proxy even doing?》。他用服务器日志作为证据,公开质疑Go官方模块代理(proxy.golang.org)对其个人代码托管服务humungus.tedunangst.com产生了“洪水般”的、看似毫无意义的巨大流量。这个事件迅速在社区发酵,将一个通常在后台默默工作的核心基础设施,推上了风口浪尖。当然在我的印象中,这已经不是Go社区第一次“抱怨” 官方Go proxy的“诡异”行为给一些小型站点带来的烦恼了。 ...

September 5, 2025 · 7 min · Tony Bai

“先发布,后审核”:Go模块生态的阿喀琉斯之踵?

本文永久链接 – https://tonybai.com/2025/07/07/go-module-supply-chain-attack-case 大家好,我是Tony Bai。 最近,GitLab的安全研究团队披露了一起极其巧妙的供应链攻击,目标直指 Go 社区中一个流行的 MongoDB 模块。这个案例本身已经足够令人警醒,但如果我们拨开攻击手法的层层迷雾,会发现其背后暴露出的,可能是整个开源生态,包括我们所依赖的 Go Modules,一个根本性的、与生俱来的脆弱性。 ...

July 7, 2025 · 7 min · Tony Bai

Go包维护者必读:如何让你的Go包更易被发现、文档更专业?

Go包维护者必读:如何让你的Go包更易被发现、文档更专业? - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

May 11, 2025 · 6 min · Tony Bai

Go模块发布流程再加固:go mod verify -tag提案详解

Go模块发布流程再加固:go mod verify -tag提案详解 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

March 28, 2025 · 6 min · Tony Bai

Gopher的Rust第一课:Rust的依赖管理

本文永久链接 – https://tonybai.com/2024/06/16/gopher-rust-first-lesson-managing-deps 在上一章《Gopher的Rust第一课:Rust代码组织》中,我们了解了Rust的代码组织形式,知道了基于Cargo构建项目以及Rust代码组织是目前的标准方式,同时Cargo也是管理项目外部依赖的标准方法,而项目内部的代码组织则由Rust module来完成。 在这一章中,我们将聚焦Rust的依赖管理,即Cargo对外部crate依赖的管理操作。我将先介绍几种依赖的来源类型(来自crates.io或其他Package Registries、来自某个git仓库以及来自本地的crate等),然后说说Cargo依赖的常见操作,包括依赖的添加、升降版本和删除;最后,聊一下如何处理依赖同一个依赖项的不同版本。 ...

June 16, 2024 · 22 min · Tony Bai

Gopher的Rust第一课:建立Rust开发环境

本文永久链接 – https://tonybai.com/2024/05/10/gopher-rust-first-lesson-setup-dev-env 经过上一章的对Rust诞生演化的了解以及设计哲学的探讨后,如果你依然决定继续Rust编程学习之旅,那么欢迎你和我一起正式走进Rust学习和实践的课堂。 编程不是“纸上谈兵”,它是一门实践的艺术。编程语言的学习离不开动手实践,因此学习任何一门编程语言的第一步都是要拥有一个这门编程语言的开发环境,这样我们才可以动手编码,理论与实践结合,不仅加速学习效率,还能取得更好的学习效果。 ...

May 10, 2024 · 19 min · Tony Bai

选择正确的Go Module Path

本文永久链接 – https://tonybai.com/2024/04/09/choose-the-right-go-module-path 最近我在查看项目代码时,注意到有人在go.mod文件中将module path写为com.example.foo了。根据这个写法,相信屏幕前的读者也可以推断出这位开发人员可能是从Java阵营转到Go的。实际开发中可能有很多开发者会使用类似的内容作为module path,但这显然不是Go的推荐写法或惯用法。 ...

April 9, 2024 · 6 min · Tony Bai