真相调查:Go 语言真的消灭了 Undefined Behavior 吗?

本文永久链接 – https://tonybai.com/2026/03/16/go-language-eliminated-undefined-behavior-truth-investigation 大家好,我是Tony Bai。 在系统编程的古老传说中,流传着一个关于“鼻恶魔”(Nasal Demons)的笑话。 这个梗源自 comp.std.c 新闻组,它是对 C/C++ 语言中“未定义行为”(Undefined Behavior,以下简称 UB)最生动也最恐怖的诠释。根据 ISO C++ 标准,如果你的代码触犯了 UB(例如数组越界、有符号整数溢出、空指针解引用),编译器可以“为所欲为”。 ...

March 16, 2026 · 12 min · Tony Bai

Go 编译器崩溃背后:一个 append 函数引发的语言规范修正案

本文永久链接 – https://tonybai.com/2025/11/30/ice-assertion-failed-with-append 大家好,我是Tony Bai。 在软件开发中,我们有时会遇到一些“显而易见”的错误。对于 Go 开发者而言,append 内建函数的第一个参数必须是切片,似乎就是这样一个“常识”。然而,当一个本应产生清晰编译错误的“常识性”错误,却导致了 Go 1.25.4 编译器的内部崩溃 (Internal Compiler Error, ICE) 时,事情就变得不再简单。 ...

November 30, 2025 · 5 min · Tony Bai

Go 官方详解“Green Tea”垃圾回收器:从对象到页,一场应对现代硬件挑战的架构演进

本文永久链接 – https://tonybai.com/2025/10/31/deep-into-go-green-tea-gc 大家好,我是Tony Bai。 关注 Go 语言演进的 Gopher 们可能已经注意到,Go 团队更换技术负责人以来,对运行时 (runtime) 和编译器 (compiler) 核心组件的打磨正日益成为团队的工作重心。从备受期待的“绿茶”GC (Green Tea GC),到 标准库simd 加速包的探索,再到 基于swisstable的 map 的实现,以及 json/v2 的设计实现,一系列动作都预示着 Go 正在其性能核心地带进行着深刻的自我革新。 ...

October 31, 2025 · 21 min · Tony Bai

告别算法“天书”,Go程序员的学术伪代码“翻译”指南

本文永久链接 – https://tonybai.com/2025/09/06/gopher-pseudocode-translation-guide 大家好,我是Tony Bai。 你是否曾在阅读顶会论文时,感觉其中的算法描述像一本晦涩难懂的**“天书”**?那些看不太懂的数学符号、奇特的箭头和看似代码又无法编译的语句(如下图),是不是常常让你望而却步,感叹理论与实践之间隔着一道鸿沟? ...

September 6, 2025 · 10 min · Tony Bai

Go的“七宗罪”:一篇“Go依然不够好”如何引爆社区激辩?

本文永久链接 – https://tonybai.com/2025/08/25/go-is-still-not-good 大家好,我是Tony Bai。 在技术圈,平静的湖面下往往暗流涌动。对于Go语言社区而言,这股潜藏已久的暗流,被近期的一篇名为《Go is still not good》的博文彻底引爆。作者Thomas Habets,一位自称拥有超过十年Go使用经验的资深开发者,在他的这篇文章中系统性地列举了他眼中Go语言的“七宗罪”。这篇文章迅速登上Hacker News热榜,吸引了超过700条评论,形成了一场规模空前的社区大辩论。 ...

August 25, 2025 · 11 min · Tony Bai

Go json/v2实战:告别内存爆炸,掌握真流式Marshal和Unmarshal

本文永久链接 – https://tonybai.com/2025/08/09/true-streaming-support-in-jsonv2 大家好,我是Tony Bai。 Go 开发者长期以来面临一个痛点:标准库 encoding/json 在处理大型 JSON 数据时,即使使用 Encoder/Decoder,也因其内部的全量缓冲机制而导致巨大的内存开销。备受期待的 encoding/json/v2 提案(#71497)旨在从根本上解决这一问题。通过引入全新的底层包 encoding/json/jsontext,v2 实现了真正的流式处理能力。本文将通过具体的、可量化的基准测试,向你展示 v1 的内存陷阱,并演示如何使用 json/v2 高效地实现流式处理大规模 JSON 数据,彻底告别内存爆炸的烦恼。 ...

August 9, 2025 · 6 min · Tony Bai

Go考古:创始人亲述Go语言的“创世纪”

本文永久链接 – https://tonybai.com/2025/07/03/meet-the-go-team-2012 大家好,我是Tony Bai。 2012 年,Google I/O 大会的舞台上,一个刚刚发布 1.0 版本的编程语言团队,正襟危坐。他们面对着全球开发者的审视和提问,这其中,就有三位图灵奖得主级别的传奇人物:Ken Thompson、Rob Pike 和 Robert Griesemer。 ...

July 3, 2025 · 6 min · Tony Bai

Go errors.Join:是“天赐之物”还是“潘多拉魔盒”?——深入错误聚合的适用场景与最佳实践

本文永久链接 – https://tonybai.com/2025/06/20/about-errors-join 大家好,我是Tony Bai。 错误处理,无疑是软件开发中永恒的核心议题之一。Go 语言以其独特的、显式的错误处理机制(即 error 作为普通值返回)而著称,这种设计强调了对错误的关注和及时处理。自 Go 1.13 引入错误包装 (wrapping) 机制以来,Go 的错误处理能力得到了显著增强。而在Go 1.20 版本中,标准库 errors 包更是带来了一个备受关注的新成员:errors.Join() 函数。 ...

June 20, 2025 · 14 min · Tony Bai

“这代码迟早出事!”——复盘线上问题:六个让你头痛的Go编码坏味道

本文永久链接 – https://tonybai.com/2025/05/31/six-smells-in-go 大家好,我是Tony Bai。 在日常的代码审查 (Code Review) 和线上问题复盘中,我经常会遇到一些看似不起眼,却可能埋下巨大隐患的 Go 代码问题。这些“编码坏味道”轻则导致逻辑混乱、性能下降,重则引发数据不一致、系统崩溃,甚至让团队成员在深夜被告警声惊醒,苦不堪言。 ...

May 31, 2025 · 24 min · Tony Bai

当Gopher拥有了“Go语言女友”:一张图带你读懂Go的那些“可爱”特性

当Gopher拥有了“Go语言女友”:一张图带你读懂Go的那些“可爱”特性 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

May 30, 2025 · 7 min · Tony Bai