Go语言技术文章
-
解释 Go Fuzz 失败输入为什么通常应保留到 testdata/fuzz,并区分真实实现缺陷、错误断言、非确定性、敏感数据和重复语料的不同处理方式。183 收藏 -
以逗号分隔标签的规范化函数为例,用 Go Fuzz 检查编解码往返、幂等、UTF-8、排序与去重性质,并给出种子语料、运行预算和失败输入回归方法。226 收藏 -
Go 模糊测试只覆盖少量路径时,先拆分种子输入边界,再检查 fuzz target 的可达性、确定性和运行指标,逐步提升语料质量。313 收藏 -
用一个带版本、标志和长度字段的 Go 二进制帧解析器,演示如何设计 f.Add 种子语料,并在 FuzzParseFrame 中断言长度一致、保留位合法、编解码回环和内存独立性。460 收藏 -
Go 测试的偶发失败不能只靠重复运行排查。本文区分测试数据种子与 go test 的 -shuffle 种子,给出局部 rand.Rand、顺序记录、CI 复现命令和诊断清单,并说明 map 迭代、并发调度与外部状态为何不能靠一个种子完全复现。195 收藏 -
TestMain 适合管理每个包只启动一次的昂贵资源,但不应承载单个用例的可变数据。本文用共享 httptest 服务演示包级生命周期、不可变入口、用例命名空间、t.Cleanup 与退出码处理,让并行测试共享资源而不互相污染。134 收藏 -
Go 测试分层的关键不在测试数量,而在依赖边界:单元测试隔离进程内规则,集成测试验证真实数据库或协议适配,端到端测试确认关键业务链路闭环。本文用订单服务和 Go testing 示例给出判断表、数据清理与失败定位方法。366 收藏 -
使用 Go 的 httptest.NewRequest 和 ResponseRecorder,在不启动真实网络服务的情况下测试 HTTP Handler 的状态码、Header、响应体以及成功和错误边界。304 收藏 -
Go 并行子测试在旧循环语义下可能让多个闭包读取同一个最终循环项;Go 1.22 已改变按轮变量语义,但 slice、map、指针和外部资源仍可能共享。本文给出兼容写法、深复制与资源隔离方法。205 收藏 -
Go 表驱动测试的价值不只是少写重复代码,更重要的是把有效输入、边界值和非法输入组织成可定位的子测试。本文用输入分区、语义化命名和 -run 精确重放整理一套实用写法。302 收藏 -
从 WaitGroup 计数器、Add、Done 与 Wait 的关系出发,解释负数 panic、Wait 早退和批次复用的边界,并给出稳定的 Go 并发写法。351 收藏 -
Go 批量任务如果靠定时轮询检查状态,既浪费唤醒次数又难以处理关闭流程。本文用 sync.Cond 把状态检查、等待和批量唤醒组织起来,并说明 Signal、Broadcast 与退出条件的选择。204 收藏 -
sync.Map 主要适合键写入一次后高频读取,或多个 goroutine 各自操作不同键的场景;需要类型安全、同键复合更新、容量计数或一致快照时,普通 map 配合 Mutex/RWMutex 通常更清晰。本文给出判断表、封装写法和上线检查项。235 收藏 -
Go 1.27 为 go doc 增加 package@version 查询形式。本文说明如何查看指定依赖版本的 API,并区分 go.mod、go list 与文档查询的职责。193 收藏 -
用 Checker v2 在 Go 结构体标签中组合 trim、lower、required、email 和跨字段规则,让请求数据先清洗再校验,并统一输出结构化错误。299 收藏