“棘手”难题:为什么 Go、Rust 与 Java 等语言的包管理永远无法达到完美?

本文永久链接 – https://tonybai.com/2026/03/04/package-management-unsolvable-problem-programming-languages 大家好,我是Tony Bai。 每天,全世界的开发者敲击下数以亿计的 npm install、go get、cargo build 或是 pip install。我们将这些包管理器视作理所当然的基础设施,仿佛它们就像水龙头一样,拧开就有源源不断的开源代码流出。然而,在这些看似简单的命令行背后,隐藏着计算机科学中最复杂、最容易引发争议,且永远无法找到“完美答案”的深水区。 ...

March 4, 2026 · 14 min · Tony Bai

拯救你的Commit Log:Conventional Commits实践指南

拯救你的Commit Log:Conventional Commits实践指南 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

April 24, 2025 · 8 min · Tony Bai

Go语言包管理简史

包管理是Go一直被诟病做得不好的功能之一。先前版本(go 1.11之前)的主要缺点之一是go get是缺乏对依赖包版本的管理和对可复制构建(reproducible build)的支持。Go社区已经开发了一些包管理器和工具作为版本化包依赖的事实标准解决方案,如glide,dep以及一些辅助工具等。 ...

September 21, 2019 · 7 min · Tony Bai

初窥Go module

自2007年“三巨头(Robert Griesemer, Rob Pike, Ken Thompson)”提出设计和实现Go语言以来,Go语言已经发展和演化了十余年了。这十余年来,Go取得了巨大的成就,先后在2009年和2016年当选TIOBE年度最佳编程语言,并在全世界范围内拥有数量庞大的拥趸。不过和其他主流编程语言一样,Go语言也不是完美的,不能满足所有开发者的“口味”。这些年来Go在“包依赖管理”和“缺少泛型”两个方面饱受诟病,它们也是Go粉们最希望Go核心Team重点完善的两个方面。 今年(2018)年初,Go核心Team的技术leader,也是Go Team最早期成员之一的Russ Cox在个人博客上连续发表了七篇文章,系统阐述了Go team解决“包依赖管理”的技术方案: vgo。vgo的主要思路包括:Semantic Import Versioning、Minimal Version Selection、引入Go module等。这七篇文章的发布引发了Go社区激烈地争论,尤其是MVS(最小版本选择)与目前主流的依赖版本选择方法的相悖让很多传统Go包管理工具的维护者“不满”,尤其是“准官方工具”:dep。vgo方案的提出也意味着dep项目的生命周期即将进入尾声。 ...

July 15, 2018 · 20 min · Tony Bai