2026 年了,写 Go + Protobuf 还在手敲 protoc 命令?是时候换用这种新姿势了!

本文永久链接 – https://tonybai.com/2026/03/05/modern-go-protobuf-dev-in-2026 大家好,我是Tony Bai。 在现代后端开发领域,Go 语言与 Protocol Buffers(简称 Protobuf)加上 gRPC 的组合,早已成为构建高性能微服务架构的“行业标准”。这两者的结合在网络传输效率、强类型契约以及跨语言互操作性上展现出了无与伦比的优势。 ...

March 5, 2026 · 13 min · Tony Bai

Go 服务自省指南:抛弃 ldflags,让你的二进制文件“开口说话”

本文永久链接 – https://tonybai.com/2025/12/31/go-introspection-using-debug-buildinfo 大家好,我是Tony Bai。 在微服务和云原生时代,当我们面对线上服务的报警时,第一个问题往往不是“哪里出错了?”,而是——“现在线上跑的到底是哪个版本?” ...

December 31, 2025 · 7 min · Tony Bai

Bash 虽好,但我选 Go:如何用 10 倍代码换来 100 倍的维护性?

本文永久链接 – https://tonybai.com/2025/12/24/bash-vs-go-10x-code-100x-maintainability 大家好,我是Tony Bai。 “Bash 是一种很棒的胶水语言,但 Go 是更好的胶水。” 在日常开发中,我们经常会写一些 Bash 脚本来处理本地环境配置、启动 Docker 容器、同步密钥等琐碎任务。起初,它们只是几行简单的命令;但随着时间推移,它们逐渐膨胀成包含数百行 jq、sed、awk 的怪物,充斥着针对 macOS 和 Linux 的条件分支,以及“千万别动这行代码”的注释。 ...

December 24, 2025 · 6 min · Tony Bai

还在当“上下文搬运工”?我写了一门课,帮你重塑AI开发工作流

本文永久链接 – https://tonybai.com/2025/11/20/ai-native-dev-workflow 大家好,我是Tony Bai。 最近半年,我发现我的开发日常,正被一种新的“工作流摩擦”所困扰。 我猜,你可能也感同身受。 我们在一块屏幕上沉浸于IDE中的Go代码,在另一块屏幕上,则像一个勤奋的“学生”,不断向AI大模型提问。我们从代码库中精心挑选上下文,复制,切换窗口,粘贴,然后带着AI给出的答案,再复制,切换,粘贴回来。 ...

November 20, 2025 · 6 min · Tony Bai

Go编译的几个细节,连专家也要停下来想想

本文永久链接 – https://tonybai.com/2024/11/11/some-details-about-go-compilation 在Go开发中,编译相关的问题看似简单,但实则蕴含许多细节。有时,即使是Go专家也需要停下来,花时间思考答案或亲自验证。本文将通过几个具体问题,和大家一起探讨Go编译过程中的一些你可能之前未曾关注的细节。 ...

November 11, 2024 · 17 min · Tony Bai

Gopher的Rust第一课:Rust代码组织

本文永久链接 – https://tonybai.com/2024/06/06/gopher-rust-first-lesson-organizing-rust-code 在上一章的讲解中,我们编写了第一个Rust示例程序”hello, world”,并给出了rustc版和cargo版本。在真实开发中,我们都会使用cargo来创建和管理Rust包。不过,Hello, world示例非常简单,仅仅由一个Rust源码文件组成,而且所有源码文件都在同一个目录中。但真实世界中的实用Rust程序,无论是公司商业项目,还是一些知名的开源项目,甚至是一些稍复杂一些的供教学使用的示例程序,它们通常可不会这么简单,都有着复杂的代码结构。 ...

June 6, 2024 · 23 min · Tony Bai

编译Go应用的黑盒挑战:无源码只有.a文件,你能搞定吗?

本文永久链接 – https://tonybai.com/2023/08/30/how-to-build-with-only-archive-in-go 上周末,一个Gopher在微信上与我交流了一个有关Go程序编译的问题。他的述求说起来也不复杂,那就是合作公司提供的API包仅包括golang archive(使用go build -buildmode=archive构建的.a文件),没有Go包的源码。如何将这个.a链接到项目构建出的最终可执行程序中呢? ...

August 30, 2023 · 10 min · Tony Bai

使用go test框架驱动的自动化测试

本文永久链接 – https://tonybai.com/2023/03/30/automated-testing-driven-by-go-test 一. 背景 团队的测试人员稀缺,无奈只能“自己动手,丰衣足食”,针对我们开发的系统进行自动化测试,这样既节省的人力,又提高了效率,还增强了对系统质量保证的信心。 ...

March 30, 2023 · 10 min · Tony Bai

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

本文永久链接 – https://tonybai.com/2023/02/08/some-changes-in-go-1-20 美国时间2023年2月1日,唯一尚未退休的Go语言之父Robert Griesemer代表Go核心开发团队在Go官博撰文正式发布了Go 1.20版本。就像Russ Cox在2022 GopherCon大会所说的那样:Go2永不会到来,Go 1.x.y将无限延续! ...

February 8, 2023 · 18 min · Tony Bai

使用Go开发Kubernetes Operator:基本结构

本文永久链接 – https://tonybai.com/2022/08/15/developing-kubernetes-operators-in-go-part1 注:文章首图基于《Kubernetes Operators Explained》修改 几年前,我还称Kubernetes为服务编排和容器调度领域的事实标准,如今K8s已经是这个领域的“霸主”,地位无可撼动。不过,虽然Kubernetes发展演化到今天已经变得非常复杂,但是Kubernetes最初的数据模型、应用模式与扩展方式却依然有效。并且像Operator这样的应用模式和扩展方式日益受到开发者与运维者的欢迎。 我们的平台内部存在有状态(stateful)的后端服务,对有状态的服务的部署和运维是k8s operator的拿手好戏,是时候来研究一下operator了。 ...

August 15, 2022 · 23 min · Tony Bai