Go 里的 sync.WaitGroup:把并发任务“等完”这件事说清楚

sync.WaitGroup 是 Go 并发里最常用的等待机制之一,核心只有 Add、Done、Wait 三个动作,但一旦调用时机或传参方式出错,就很容易卡死或触发 panic。本文按“能解决什么问题、怎么组合使用、哪些地方最容易踩坑”的顺序重写,方便你直接对应到项目场景判断是否该用它。

Go 里的 sync.WaitGroup:把并发任务“等完”这件事说清楚

Go 里的 `fallthrough` 到底该怎么用

Go 的 switch 默认不会像 C、Java 那样自动穿透,这让 `fallthrough` 成了一个既实用又容易被误用的关键字。本文从默认行为、语法限制、典型场景到替代写法梳理它的真实用法,帮助你判断什么时候该用、什么时候该避开。

Go 里的 `fallthrough` 到底该怎么用

Go 切片避坑:nil 切片和空切片到底差在哪

Go 里的 nil 切片和空切片打印出来都像 `[]`,但它们在底层指针、`nil` 比较、内存分配和 JSON 序列化上的表现并不一样。本文从切片结构入手,用代码和常见业务场景把两者的差异讲清,并给出判断空值、接口返回和序列化转换时更稳妥的写法。

Go 切片避坑:nil 切片和空切片到底差在哪

Go 原生模糊测试 Fuzzing 让 bug 无处遁形

Go 1.18 把模糊测试直接带进了标准库 testing,重点不是替代单元测试,而是用海量随机、畸形输入去撞出你没预设到的边界问题。本文结合字符串反转示例,讲清它的工作机制、写法、报错原因和适合落地的场景。

Go 原生模糊测试 Fuzzing 让 bug 无处遁形

Go 语言中 for 和 range 的性能比较

Go 里 `for` 和 `range` 都能完成遍历,但性能差异并不取决于语法本身,而是取决于元素类型和是否发生拷贝。结合切片、结构体、指针、map 与 channel 的基准结果,可以更准确地判断什么时候该优先可读性,什么时候该回到索引循环。

Go 语言中 for 和 range 的性能比较

Go 里为什么 nil 接口不等于 nil?把底层结构和常见陷阱一次讲清

Go 里常见的“nil 接口不等于 nil”并不是语言反常,而是接口底层表示决定的结果。关键点在于:接口值同时保存类型信息和数据指针,只有两者都为 nil,接口本身才等于 nil。理解这一点后,错误返回、类型断言和反射判断这些常见场景就更容易避坑。

Go 里为什么 nil 接口不等于 nil?把底层结构和常见陷阱一次讲清