告别性能猜谜:一份Go并发操作的成本层级清单

本文永久链接 – https://tonybai.com/2025/08/26/go-concurrency-cost-hierarchy 大家好,我是Tony Bai。 Go语言的并发模型以其简洁直观著称,但这种简单性背后,隐藏着一个跨越五个数量级的巨大性能鸿沟。当你的高并发服务遭遇性能瓶颈时,你是否也曾陷入“性能猜谜”的困境:是sync.Mutex太慢?是atomic操作不够快?还是某个channel的阻塞超出了预期?我们往往依赖直觉和pprof的零散线索,却缺乏一个系统性的框架来指导我们的判断。 ...

August 26, 2025 · 13 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

原子操作的瓶颈与Go的多核扩展性之痛:深入剖析sync.ShardedValue及per-CPU提案

原子操作的瓶颈与Go的多核扩展性之痛:深入剖析sync.ShardedValue及per-CPU提案 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

May 19, 2025 · 9 min · Tony Bai

聊聊Prometheus Gauge的增减操作实现

本文永久链接 – https://tonybai.com/2023/01/10/how-prometheus-gauge-add-and-sub 1. Gauge是啥? 熟悉Prometheus的小伙伴们都知道Prometheus提供了四大指标类型: Counter Gauge Histogram Summary Histogram和Summary是一类,但理解起来稍复杂一些,这里我们暂且不提。Counter顾名思义“计数器”,仅提供了Add方法,是一个一直递增的数值;而Gauge直译为“仪表盘”,它也是一个数值,但和Counter不同,它不仅提供Add方法,还提供了Sub方法。如果你的指标可增可减或是需要支持负数,那么Gauge显然是一个比Counter更适合的指标类型。 ...

January 10, 2023 · 6 min · Tony Bai

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

本文永久链接 – https://tonybai.com/2022/08/22/some-changes-in-go-1-19 我们知道Go团队在2015年重新规定了团队发布版本的节奏,将Go大版本的发布频率确定为每年两次,发布窗口定为每年的2月与8月。而实现自举的Go 1.5版本是这一个节奏下发布的第一个版本。一般来说,Go团队都会在这两个窗口的中间位置发布版本,不过这几年也有意外,比如承载着泛型落地责任的Go 1.18版本就延迟了一个月发布。 ...

August 22, 2022 · 20 min · Tony Bai

GoCN社区Go读书会第二期:《Go语言精进之路》

本文永久链接 – https://tonybai.com/2022/07/07/gocn-community-go-book-club-issue2-go-programming-from-beginner-to-master 本文是2022年6月26日我在GoCN社区的Go读书会第二期《Go语言精进之路》直播的文字稿。本文对直播的内容做了重新整理与修订,供喜欢阅读文字的朋友们在收看直播后的揣摩和参考。视频控的童鞋可以关注GoCN公众号和视频号看剪辑后的视频,也可以在B站GopherChina专区下收看视频回放(https://www.bilibili.com/video/BV1p94y1R7jg)。 ...

July 7, 2022 · 23 min · Tony Bai

Go 1.19新特性前瞻

本文永久链接 – https://tonybai.com/2022/06/12/go-1-19-foresight 美国时间2022年5月7日,Go 1.19版本开发分支进入新特性冻结(freeze)阶段,即只能修Bug,不能再向Go 1.19版本中增加新特性了。由于上一个版本Go 1.18因引入泛型改动较大,推迟了一个月发布,这直接导致了Go 1.19版本的开发周期被缩短。 ...

June 12, 2022 · 8 min · Tony Bai

基于Redis Cluster的分布式锁实现以互斥方式操作共享资源

今天要说的技术方案也是有一定项目背景的。在上一个项目中,我们需要对一个redis集群中过期的key进行处理,这是一个分布式 系统,考虑到高可用性,需要具备过期处理功能的服务有多个副本,这样我们就要求在同一时间内仅有一个副本可以对过期的key>进行处理,如果该副本挂掉,系统会在其他副本中再挑选出一个来处理过期的key。 ...

February 13, 2021 · 15 min · Tony Bai

Uber Go语言编码规范

Uber是世界领先的生活出行服务提供商,也是Go语言的早期adopter,根据Uber工程博客的内容,大致可以判断出Go语言在Uber内部扮演了十分重要的角色。Uber内部的Go语言工程实践也是硕果累累,有大量Go实现的内部工具被Uber开源到github上,诸如被Gopher圈熟知的zap、jaeger等。2018年年末Uber将内部的Go风格规范开源到github,经过一年的积累和更新,该规范已经初具规模,并受到广大Gopher的关注。本文是该规范的中文版本,并”夹带“了部分笔者的点评,希望对国内Gopher有所帮助。 注:该版本基于commit 3baa2bd翻译,后续不会持续更新。 一. 介绍 样式(style)是支配我们代码的惯例。术语“样式”有点用词不当,因为这些约定涵盖的范围不限于由gofmt替我们处理的源文件格式。 ...

October 12, 2019 · 17 min · Tony Bai