系统设计的“元素周期表”:40个横跨所有领域的通用设计原则

本文永久链接 – https://tonybai.com/2025/07/31/periodic-table-of-system-design 大家好,我是Tony Bai。 近日,一篇名为《系统设计的元素》(Elements of System Design)的论文引发社区热议。它的目标宏大且吸睛:通过梳理上百篇横跨操作系统、数据库、分布式系统等领域的经典论文,提炼出一套通用的系统设计原则“元素周期表”。 ...

July 31, 2025 · 16 min · Tony Bai

Go语言之父的反思:我们做对了什么,做错了什么

本文永久链接 – https://tonybai.com/2024/01/07/what-we-got-right-what-we-got-wrong 在《2023年Go语言盘点:稳中求新,稳中求变》和《Go测试的20个实用建议》两篇文章中,我都提到过已经退居二线的Go语言之父Rob Pike在Go开源14周年的那天亲自在GopherCon Australia 2023上发表了“What We Got Right, What We Got Wrong”的主题演讲来回顾Go诞生以来的得与失。近期Rob Pike终于将这次演进的文字稿发布了出来!GopherCon Australia也在油管上发布了这个演进的视频。Rob Pike的观点对所有Gopher都是极具参考价值的,因此在这篇博文中,我将Rob Pike的这次演讲稿翻译成中文,供大家参考(结合文字稿和视频),我们一起来领略和学习大师的观点。 ...

January 7, 2024 · 24 min · Tony Bai

通过实例理解Go静态单赋值(SSA)

本文永久链接 – https://tonybai.com/2022/10/21/understand-go-ssa-by-example 在上一篇文章《通过实例理解Go内联优化》中,我们探讨了Go编译器在编译中端进行的内联优化。内联优化基于IR中间表示进行,不过Go编译过程不止有一种IR表示,这点和龙书《编译原理(第二版)》的在第六章“中间代码生成”一开始处的讲解是一致的,即在将给定源语言的一个程序翻译成特定的目标机器代码的过程中,一个编译器可能构造出一系列中间表示(IR),如下图: 高层中间表示更接近于源语言,而低层的中间表示则更接近于目标机器。在Go编译过程中,如果说内联优化使用的IR是高层中间表示,那么低层中间表示非支持静态单赋值(SSA)的中间代码形式莫属。 ...

October 21, 2022 · 15 min · Tony Bai

通过实例理解Go内联优化

本文永久链接 – https://tonybai.com/2022/10/17/understand-go-inlining-optimisations-by-example 移动互联网时代,直面C端用户的业务系统规模一般都很庞大,系统消耗的机器资源也很可观,系统使用的CPU核数、内存都是在消耗公司的真金白银。在服务水平不下降的前提下尽量降低单服务实例的资源消耗,即我们俗称的“少吃草多产奶”,一直是各个公司经营人员的目标,有些公司每降低1%的CPU核数使用,每年都能节省几十万的开销。 ...

October 17, 2022 · 16 min · Tony Bai

针对大型数组的迭代,for range真的比经典for loop慢吗?

本文永久链接 – https://tonybai.com/2022/03/19/for-range-vs-classic-for-loop-when-iterating-large-array Go语言推崇“一件事情仅有一个作法”!比如:Go仅保留一类循环控制语句,那就是经典版的for loop: for i := 0; i < 100; i++ { ... ... } 而像C语言支持的while、do…while等循环控制语句都被排除在Go简洁的语法之外。但为了方便Go开发者对复合数据类型的迭代,比如:数组、切片、channel以及map等,Go提供了一个变种for range loop,甚至对于map、channel进行遍历,仅能使用for range loop,经典版for loop根本不支持。 ...

March 19, 2022 · 7 min · Tony Bai

Go语言对ARM架构的支持与未来[译]

本文翻译自Go官方博客文章《Go on ARM and Beyond》(https://blog.golang.org/ports)。 最近业界关于非x86处理器的讨论沸沸扬扬,所以我们认为值得简单的写一篇关于Go语言对这些非x86处理器的支持情况的文章。 ...

December 18, 2020 · 6 min · Tony Bai

Go语言项目的安全评估技术

在今年夏天我们对Kubernetes的评估成功之后,我们收到了大量Go项目的安全评估需求。为此,我们将在其他编译语言中使用过的安全评估技术和策略调整适配到多个Go项目中。 我们从了解语言的设计开始,识别出开发人员可能无法完全理解语言语义特性的地方。多数这些被误解的语义来自我们向客户报告的调查结果以及对语言本身的独立研究。尽管不是详尽无遗,但其中一些问题领域包括作用域、协程、错误处理和依赖管理。值得注意的是,其中许多与运行时没有直接关系。默认情况下,Go运行时本身的设计是安全的,避免了很多类似C语言的漏洞。 ...

November 8, 2019 · 14 min · Tony Bai

Go 1.10中值得关注的几个变化

又到了Go语言新版本的发布时间窗口了!这次的主角是Go 1.10。 曾几何时, 这是很多Gopher在Go 1.8、Go 1.9时猜测是否存在的那个版本,毕竟minor version即将进化到两位数。从Go语言第一封设计mail发出到现在的十年间,尤其是Go语言经历了近几年的爆发式增长,基本奠定了云原生第一语言的位置之后,人们对Go语言有了更多新的、更为深刻的认知,同时对这门编程语言也有了更多的改进和优化的期望。Go2在Gopher心中的位置日益提升,直到Russ Cox在GopherCon 2017上公布了Go core team对Go2的开发策略,我们才意识到:哦,Go1还将继续一段时间,甚至是一段很长的时间。2018年2月,我们将迎来Go 1.10版本。 ...

February 17, 2018 · 23 min · Tony Bai

Go 1.8中值得关注的几个变化

在已经过去的2016年,Go语言继在2009年之后再次成为编程语言界的明星- 问鼎TIOBE 2016年度语言。这与Go team、Go community和全世界的Gophers的努力是分不开的。按计划在这个2月份,Go team将正式发布Go 1.8版本(截至目前,Go的最新版本是Go 1.8rc3)。在这里我们一起来看一下在Go 1.8版本中都有哪些值得Gopher们关注的变化。 ...

February 3, 2017 · 19 min · Tony Bai

Go 1.7中值得关注的几个变化

零、从Release Cycle说起 从Go 1.3版本开始,Golang核心开发Team的版本开发周期逐渐稳定下来。经过Go 1.4、Go1.5和Go 1.6的实践,大神Russ Cox在Go wiki上大致定义了Go Release Cycle的一般流程: ...

June 21, 2016 · 14 min · Tony Bai