别把 Go 写成 Java:毁掉项目从过度架构开始

本文永久链接 – https://tonybai.com/2026/06/05/stop-writing-go-like-java-avoid-over-architecting 大家好,我是Tony Bai。 前不久,Go 语言社区 Reddit (r/golang) 上爆发了两场激烈的争论。 这两个帖子的主题直击了无数 Go 开发者的灵魂深处: 我们该如何构建一个大型的 Go 模块化单体架构,而不被复杂的“架构设计”淹没? 为什么现在的 Go 项目里,pkg 和 internal 目录被滥用得如此令人发指? 如果你正在维护一个中大型的 Go 后端项目,你大概率经历过这样的绝望时刻:为了加一个极其简单的业务字段,你需要穿透 handler、usecase、domain、repository、adapter 等足足五层抽象结构;你的项目根目录下躺着一个 pkg 文件夹,里面又套着 internal,代码藏在七八级目录深处。 ...

June 5, 2026 · 8 min · Tony Bai

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

GODEBUG 的“技术债”清算:Go 团队提出全新生命周期管理策略

本文永久链接 – https://tonybai.com/2025/11/05/proposal-remove-godebug-flags 大家好,我是Tony Bai。 自 2012 年 Go 1 发布以来,“向后兼容性” (Go 1 compatibility guarantee) 不仅是一份承诺,更是 Go 语言赢得全球开发者信任的基石。然而,为了在不违背这份承诺的前提下修复 bug、引入新行为,Go 团队创造了一个强大的“安全阀”——GODEBUG 环境变量。 ...

November 5, 2025 · 6 min · Tony Bai

“可移植性”的隐藏成本:Go为何要重塑maphash并划定新的运行时边界?

本文永久链接 – https://tonybai.com/2025/09/23/go-maphash-portability-costs-and-runtime-boundaries 大家好,我是Tony Bai。 对于大多数Go开发者来说,标准库似乎是一个浑然天成的整体。我们理所当然地使用着fmt、net/http和encoding/json,很少去思考它们内部的依赖关系和架构边界。然而,在标准库光鲜的外表之下,一场关于其核心架构的深刻变革正在悄然发生,而hash/maphash这个看似不起眼的包,正处在这场变革的风暴中心。 ...

September 23, 2025 · 6 min · Tony Bai

Dave Cheney 复出首谈:那些我反复强调的Go编程模式

本文永久链接 – https://tonybai.com/2025/09/17/some-things-i-keep-repeating-about-go 大家好,我是Tony Bai。 在阔别公众视野数年后,Go 社区的传奇人物 Dave Cheney 终于重返 GopherCon Europe 的舞台,发表了一场备受瞩目的复出首谈(注:我印象中的回归首谈^_^)。这场题为《那些我反复强调的 Go 编程之事》的演讲,没有追逐时髦的技术热点,而是选择回归编程的本源,分享了他十五年 Go 编程生涯中,那些被反复实践、验证并沉淀下来的核心理念。 ...

September 17, 2025 · 9 min · Tony Bai

千呼万唤始出来?Go 1.25解决Git仓库子目录作为模块根路径难题

千呼万唤始出来?Go 1.25解决Git仓库子目录作为模块根路径难题 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

June 7, 2025 · 8 min · Tony Bai

Go项目该拥抱Monorepo吗?Google经验、etcd模式及白盒交付场景下的深度剖析

Go项目该拥抱Monorepo吗?Google经验、etcd模式及白盒交付场景下的深度剖析 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

June 6, 2025 · 14 min · Tony Bai

Go项目设计的“七宗罪”?警惕那些流行的“反模式”

Go项目设计的“七宗罪”?警惕那些流行的“反模式” - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

April 21, 2025 · 9 min · Tony Bai

Go语言演进的双保险:GOEXPERIMENT与GODEBUG

本文永久链接 – https://tonybai.com/2024/10/11/go-evolution-dual-insurance-goexperiment-godebug Go语言自诞生以来就以其简洁、高效和强大的并发支持而闻名,Go团队承诺保持Go1向后兼容性,以确保用户的代码在未来的版本中继续正常运行。然而,保持语言的稳定性与不断创新(增加新特性)之间的平衡一直是Go团队面临的挑战。为了应对这一挑战,Go语言引入了两个关键机制:GOEXPERIMENT和GODEBUG来平衡新功能的试验、稳定发布和向后兼容。这两个机制共同构成了Go语言特性发布的“双保险”,确保语言能够稳步前进的同时,不会因为激进的改变而影响现有代码的稳定性。本文就来简单探讨一下这两个机制是如何保障Go语言新特性稳定发布的。 1. GOEXPERIMENT:新特性的摇篮 GOEXPERIMENT是一个Go语言的环境变量,是用于控制实验性特性的机制。它允许开发者在编译时(使用go build、go install、go run或go test)启用一些尚未正式发布的语言特性或优化。通过GOEXPERIMENT,Go团队能够在正式发布之前广泛测试新功能,收集反馈并进行必要的调整。 ...

October 11, 2024 · 12 min · Tony Bai

Go 1.23新特性前瞻

本文永久链接 – https://tonybai.com/2024/05/30/go-1-23-foresight 2024年5月22日,Go 1.23版本功能特性正式冻结,后续将只改bug,不增加新feature。 对Go团队来说,这意味着开始了Go 1.23rc1的冲刺,对我们普通Gopher而言,这意味着是时候对Go 1.23新增的功能做一些前瞻了! ...

May 30, 2024 · 12 min · Tony Bai