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 的“简单”幻象:易于上手,难于精通

本文永久链接 – https://tonybai.com/2025/11/07/go-simple-illusion-easy-to-learn-hard-to-master 大家好,我是Tony Bai。 “Go 语言看起来如此简单,我的这种假设是错的吗?” 近日,一位刚接触 Go 几个月的新手在reddit golang论坛发出了这样一个真诚的提问。他感觉 Go “超级简单”,并好奇自己是否因为初学者的身份,而忽略了语言中那些“疯狂的复杂性”。 ...

November 7, 2025 · 7 min · Tony Bai

Go 考古:Slice 的“隐秘角落”——只读切片与扩容策略的权衡

本文永久链接 – https://tonybai.com/2025/10/02/go-archaeology-slice 大家好,我是Tony Bai。 slice(切片),可以说是 Go 语言中最重要、也最常用的数据结构,没有之一。我们每天都在使用它,尤其是 append 函数,它就像一个魔术师,总能“恰到好处”地为我们管理好底层数组的容量,让我们几乎感受不到内存分配的烦恼。 ...

October 2, 2025 · 12 min · Tony Bai

从arena、memory region到runtime.free:Go内存管理探索的务实转向

本文永久链接 – https://tonybai.com/2025/09/18/go-runtime-free-proposal 大家好,我是Tony Bai。 Go 的垃圾收集器(GC)是其简单性和并发安全性的基石,但也一直是性能优化的焦点。近年来,Go 核心团队为了进一步降低 GC 开销,进行了一系列前沿探索:从备受争议的arena 实验,到更优雅但实现复杂的 memory regions构想,最终,焦点似乎汇聚在了一项更务实、更具潜力的提案上——runtime.free。这项编号为 #74299 的实验性提案,正试图为 Go 的内存管理引入一个革命性的新维度:允许编译器和部分标准库在特定安全场景下,绕过 GC,直接释放和重用内存。其原型已在 strings.Builder 等场景中展现出高达 2 倍的性能提升。 ...

September 18, 2025 · 7 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 1.25规范大扫除:移除“Core Types”,为更灵活的泛型铺路

Go 1.25规范大扫除:移除“Core Types”,为更灵活的泛型铺路 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

March 27, 2025 · 7 min · Tony Bai

Go 1.22新特性前瞻

本文永久链接 – https://tonybai.com/2023/12/25/go-1-22-foresight 美国时间2023年12月20日,Go官方宣布Go 1.22rc1发布,开启了为期2个多月的、常规的公测之旅,Go 1.22预计将于2024.2月份正式发布! ...

December 25, 2023 · 16 min · Tony Bai

Go未来演进:基于共同目标和数据驱动的决策

本文永久链接 – https://tonybai.com/2023/12/10/go-changes 自从Go语言之父Rob Pike从Google退休并隐居澳洲后,Russ Cox便成为了Go语言团队的“带头大哥”,虽然其资历还无法与依旧奋战在一线的另外一位Go语言之父Robert Griesemer相比。如今,Russ Cox对Go语言未来的演化发展是很有“发言权”的,Go module的引入便是Russ Cox的重要决策之一。从Go社区来看,这些年来,以Russ Cox为首的Go团队对Go演进决策总体上是良性的、受欢迎的,比如Go module、Go泛型、Go对wasm的支持等,当然也有一些变化是受到质疑的,比如:Go 1.22版本很可能从试验特性到正式特性的loopvar等。 ...

December 10, 2023 · 18 min · Tony Bai

当函数设计遇到切片

本文永久链接 – https://tonybai.com/2022/10/27/when-encountering-slice-during-function-design 切片(slice)是Go语言中的一种重要的也是最常用的同构数据类型。在Go语言编码过程中,我们多数情况下会使用slice替代数组,一来是因为其动态可扩展,二来在多数场合传递slice的开销要比传递数组要小(这里有一些例外)。 ...

October 27, 2022 · 5 min · Tony Bai

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

本文永久链接 – https://tonybai.com/2022/04/20/some-changes-in-go-1-18 从3月23日开始,我居家办公了20+天。这期间我本来是应该有时间写下这篇综述类文章的,但是封了两天后,抢菜、带娃的事情就开始困扰着我。我实在没有下笔写下这篇文章的心思。4月13日终于解封了,上班后的气象就是不一样,人也精神了很多,于是这篇文章也被提上了日程。希望新冠疫情早日结束吧,希望每个人都能在晴朗的户外享受那春日的暖意。 ...

April 20, 2022 · 23 min · Tony Bai