Go 考古:Go 官方如何决定支持你的 CPU 和 OS?

Go 考古:Go 官方如何决定支持你的 CPU 和 OS? - Tony Bai Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ ...

January 1, 2026 · 5 min · Tony Bai

像 Go 创始人一样思考:用五大思维原理重学 Go 语言

本文永久链接 – https://tonybai.com/2025/12/26/think-like-go-founders-relearn-go-five-principles 大家好,我是Tony Bai。 学习一门新的编程语言时,我们常常陷入“是什么”的迷雾:goroutine 是什么?channel 是什么?interface 是什么?我们记忆语法,模仿示例,却很少追问那个更根本的问题——“为什么”? ...

December 26, 2025 · 9 min · Tony Bai

成为更完整的 Go 工程师,从补上这堂系统编程课开始

本文永久链接 – https://tonybai.com/2025/09/01/system-programming-in-go 大家好,我是Tony Bai。 作为一名 Go 工程师,我们无疑是幸运的。这门语言为我们提供了简洁的语法、强大的并发模型和一套设计精良的标准库。我们能以极高的效率,构建出高性能的 Web 服务、数据管道和云原生应用。 ...

September 1, 2025 · 6 min · Tony Bai

解构Go并发之核,与Dmitry Vyukov共探Go调度艺术

解构Go并发之核,与Dmitry Vyukov共探Go调度艺术 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

June 18, 2025 · 3 min · Tony Bai

惊!Go在十亿次循环和百万任务中表现不如Java,究竟为何?

本文永久链接 – https://tonybai.com/2024/12/02/why-go-sucks 编程语言比较的话题总是能吸引程序员的眼球! 近期外网的两篇编程语言对比的文章在国内程序员圈里引起热议。一篇是由Ben Dicken (@BenjDicken) 做的语言性能测试,对比了十多种主流语言在执行10亿次循环(一个双层循环:1万 * 10 万)的速度;另一篇则是一个名为hez2010的开发者做的内存开销测试,对比了多种语言在处理百万任务时的内存开销。 ...

December 2, 2024 · 16 min · Tony Bai

使用Go语言实现eBPF程序内核态与用户态的双向数据交换

本文永久链接 – https://tonybai.com/2022/07/25/bidirectional-data-exchange-between-kernel-and-user-states-of-ebpf-programs-using-go 在之前的两篇文章中,无论是使用C语言开发eBPF程序,还是使用Go开发的eBPF程序,都是hello world级别的,可能有用,但谈不上十分实用。 通常来说,一个实用的eBPF程序,它的内核态部分与用户态部分是有数据交换的,有了这种数据交换,eBPF才能发挥更大的威力。而要想让eBPF程序具备较强的实用性,eBPF MAP是绕不过去的机制。 ...

July 25, 2022 · 11 min · Tony Bai

图解Go运行时调度器

本文翻译自《Illustrated Tales of Go Runtime Scheduler》。 译注:原文章结构有些乱,笔者自行在译文中增加了一些分级标题,让结构显得更清晰一些:)。 多goroutines形式的Go并发是编写现代并发软件的一种非常方便的方法,但是您的Go程序是如何高效地运行这些goroutines的呢? 在这篇文章中,我们将深入Go运行时底层,从设计角度了解Go运行时调度程序是如何实现其魔法的,并运用这些原理去解释在Go性能调试过程中产生的Go调度程序跟踪信息。 ...

March 21, 2020 · 16 min · Tony Bai

也谈Go的可移植性

Go有很多优点,比如:简单、原生支持并发等,而不错的可移植性也是Go被广大程序员接纳的重要因素之一。但你知道为什么Go语言拥有很好的平台可移植性吗?本着“知其然,亦要知其所以然”的精神,本文我们就来探究一下Go良好可移植性背后的原理。 一、Go的可移植性 说到一门编程语言可移植性,我们一般从下面两个方面考量: 语言自身被移植到不同平台的容易程度; 通过这种语言编译出来的应用程序对平台的适应性。 在Go 1.7及以后版本中,我们可以通过下面命令查看Go支持OS和平台列表: ...

June 27, 2017 · 10 min · Tony Bai

也谈goroutine调度器

Go语言在2016年再次拿下TIBOE年度编程语言称号,这充分证明了Go语言这几年在全世界范围内的受欢迎程度。如果要对世界范围内的gopher发起一次“你究竟喜欢Go的哪一点”的调查,我相信很多Gopher会提到:goroutine。 Goroutine是Go语言原生支持并发的具体实现,你的Go代码都无一例外地跑在goroutine中。你可以启动许多甚至成千上万的goroutine,Go的runtime负责对goroutine进行管理。所谓的管理就是**“调度”,粗糙地说调度**就是决定何时哪个goroutine将获得资源开始执行、哪个goroutine应该停止执行让出资源、哪个goroutine应该被唤醒恢复执行等。goroutine的调度是Go team care的事情,大多数gopher们无需关心。但个人觉得适当了解一下Goroutine的调度模型和原理,对于编写出更好的go代码是大有裨益的。因此,在这篇文章中,我将和大家一起来探究一下goroutine调度器的演化以及模型/原理。 ...

June 23, 2017 · 14 min · Tony Bai