Go语言技术文章
-
用 go.work 和 use 组织多个 Go 模块的本地联调,并通过 GOWORK=off 完成发布前的独立校验。372 收藏 -
把 Go 结构化输出测试从脆弱的长字符串断言迁移到 golden 文件:先稳定序列化,再用 -update 显式更新基线,最后输出可审阅的差异,避免测试被悄悄改绿。125 收藏 -
Go Benchmark测量分配次数,需先明确一次操作、夹具准备与结果生命周期。本文用分规模字节拼接示例说明ResetTimer、ReportAllocs和三类指标,避免把初始化或缓冲区复用误当成优化收益。306 收藏 -
用 Go 原生 fuzz 测试给文本解析器加入种子语料、Fuzz 函数和错误分类,区分预期的输入错误与需要修复的崩溃、越界和状态不一致。196 收藏 -
用 Go httptest.Server 搭建可控的外部 API 替身,检查请求方法、路径、请求体和响应错误,并处理响应体与测试服务的关闭边界。490 收藏 -
Go 表驱动测试适合把多组输入、期望输出和用例名称集中管理,再用 t.Run 建立可筛选的子测试。本文围绕输入隔离、错误断言、循环变量和失败定位给出可直接改写的组织方式。362 收藏 -
Go atomic.Int64保证单字段操作原子,但多个Load不构成同一时刻快照。本文用完整小程序说明并发加减、运行期采样、最终计数与周期取差,并归纳重置和对象复制的边界。267 收藏 -
用 Go sync.Cond 实现有界队列时,关键不是记住 Signal 还是 Broadcast,而是让状态判断、Wait 循环和通知都在同一把锁下完成。本文拆解未满、非空和关闭三个条件,并给出按现象排查卡住问题的清单。498 收藏 -
sync.Once 适合只允许成功初始化一次的场景,但初始化函数一旦返回或 panic,后续 Do 不会重试。本文用显式状态机实现并发等待、失败退避、context 取消与成功缓存,并给出方案选择边界。172 收藏 -
Go 可以用带容量的 channel 保存令牌限制同时执行的任务数,并通过 context 取消等待、defer 归还令牌,避免并发失控或槽位泄漏。111 收藏 -
用 Go 的 jobs channel、context 和 sync.WaitGroup 设计 worker pool 的优雅停止与强制取消,明确任务回收、结果关闭和 Submit 并发边界。130 收藏 -
Go SQL事务可采用显式提交、延迟回滚兜底结构。本文以库存预留代码说明中间错误返回、ErrTxDone、清理异常与提交失败的处理,并解释事务上下文和盲目重试的风险。401 收藏 -
用请求级 context 派生查询超时,把它传给 database/sql 的 QueryContext,并在取消、超时和驱动错误之间做出清晰判断,同时保证结果集关闭和连接池资源回收。344 收藏 -
Go database/sql 的 sql.DB 是连接池。需要让一组操作落在同一个数据库会话时,可以用 DB.Conn 获取独立连接;操作结束必须调用 Conn.Close 将连接归还池中,并用上下文控制等待时间。209 收藏 -
用 Go database/sql 查询一条记录时,QueryRowContext 的错误要在 Scan 处读取,并正确区分 sql.ErrNoRows、类型转换失败和查询错误。302 收藏