Go 1.26 发布在即,为何 json/v2 依然“难产”?七大技术路障全解析

本文永久链接 – https://tonybai.com/2026/02/11/go-1-26-json-v2-delay-7-technical-roadblocks 大家好,我是Tony Bai。 Go 1.26 预计将于本月(2026 年 2 月)正式发布。然而,在即将到来的 release notes 的欢呼声中,有一个备受瞩目的名字依然带着“实验性”的标签躲在 GOEXPERIMENT 背后——那就是 encoding/json/v2。 ...

February 11, 2026 · 9 min · Tony Bai

Go并行编程的“第一性原理”:Guy Steele 教你如何“不去想”并行

Go并行编程的“第一性原理”:Guy Steele 教你如何“不去想”并行 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

June 29, 2025 · 11 min · Tony Bai

一文搞懂如何在Go包中支持Hash-Based Bisect调试

本文永久链接 – https://tonybai.com/2024/mm/dd/how-to-support-hash-based-bisect-in-go-package bisect是一个英文动词,意为“二分”或“分成两部分”。在数学和计算机科学中,通常指将一个区间或一个集合分成两个相等的部分。 对于程序员来说,最熟悉的bisect应用莫过于下面两个: ...

November 24, 2024 · 17 min · Tony Bai

通过Go示例理解函数式编程思维

本文永久链接 – https://tonybai.com/2024/08/11/understand-functional-programming-in-go 一个孩子要尝试10次、20次才肯接受一种新的食物,我们接受一种新的范式,大概不会比这个简单。– 郭晓刚 《函数式编程思维》译者 函数式编程(Functional Programming, 简称fp)是一种编程范式,与命令式编程(Imperative Programming)、面向对象编程(OOP)、泛型编程(Generics Programming)、逻辑编程(logic Programming)等是一类的概念。 ...

August 11, 2024 · 21 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

手把手教你使用ANTLR和Go实现一门DSL语言(第五部分):错误处理

本文永久链接 – https://tonybai.com/2022/05/30/an-example-of-implement-dsl-using-antlr-and-go-part5 无论是端应用还是云应用,要上生产环境,有一件事必须要做好,那就是错误处理。在本系列前面的文章中,我们设计了文法与语法、建立并验证了语义模型,但我们没有特别关注错误处理。在这一篇中,我们就来补上这个环节。 DSL设计与实现过程有以下几个主要环节,在不同环节,我们关注的错误处理的主要对象是不同的。如下图所示: ...

May 30, 2022 · 8 min · Tony Bai

手把手教你使用ANTLR和Go实现一门DSL语言(第四部分):组装语义模型并测试DSL

本文永久链接 – https://tonybai.com/2022/05/28/an-example-of-implement-dsl-using-antlr-and-go-part4 在上一篇文章中,我们为DSL建立了完整的语义模型,我们距离DSL的语法示例真正run起来还差最后一步,那就是基于语法树提取信息(逆波兰式)、组装语义模型,在加载语义模型并实例化各个规则处理器(processor)后,我们就可以处理数据了!下面是我们部署在海洋浮标上的指标采集程序的全景图: 在这一篇中,我们就来按照上图,通过语法树提取逆波兰式并组装语义模型,让我们的语法示例能真正按预期run起来! 一. 从语法树提取逆波兰式并组装语义模型 通过上面语义模型的讲解,我们知道了语法树与语义模型之间的联系包括逆波兰式、windowsRange、result和enumableFunc。其主要联系是那个逆波兰式,而像windowsRange、result和enumableFunc这些信息都相对容易提取。 ...

May 28, 2022 · 7 min · Tony Bai

手把手教你使用ANTLR和Go实现一门DSL语言(第三部分):建立和验证语义模型

本文永久链接 – https://tonybai.com/2022/05/27/an-example-of-implement-dsl-using-antlr-and-go-part3 在前面的系列文章中,我们为气象学家们设计了一门名为Tdat的DSL,使用ANTLR的文法规则编写了Tdat的文法,基于该文法生成了Tdat的语法解析器代码并初步验证了文法的正确性,Tdat可以成功将我们编写的Tdat语法代码样例解析为一颗内存中的树结构。 此时此刻,我们编写的DSL语法代码还无法按预期工作,因为缺少执行语义。在这篇文章中,我们就来为这门DSL建立语义模型,并单独对这个语义模型进行验证。 ...

May 27, 2022 · 13 min · Tony Bai

后端程序员一定要看的语言大比拼:Java vs. Go vs. Rust

这是Java,Go和Rust之间的比较。这不是基准测试,更多是对可执行文件大小、内存使用率、CPU使用率、运行时要求等的比较,当然还有一个小的基准测试,可以看到每秒处理的请求数量,我将尝试对这些数字进行有意义的解读。 为了尝试尽可能公平比较,我在此比较中使用每种语言编写了一个Web服务。Web服务非常简单,它提供了三个REST服务端点(endpoint)。 ...

May 1, 2020 · 9 min · Tony Bai