Go语言技术文章
-
Go 的 testing.AllocsPerRun 数值变化大时,先排查初始化、输入状态复用、并行测试和后台分配,再决定增加 runs 还是改用 benchmark。本文按测量边界、稳定输入和指标分工给出一套可执行的检查顺序。223 收藏 -
Go 的 html/template 会按输出上下文自动转义。本文解释为什么不能直接拼 HTML 字符串,以及如何划分普通文本、可信片段和回归检查边界。388 收藏 -
Go benchmark 结果忽高忽低,常见原因不是被测函数本身,而是初始化落在计时区间、分配统计未分开或运行噪声未被重复确认。本文用 testing.B 说明 StopTimer、ResetTimer、ReportAllocs 和 -count 的配合方式。368 收藏 -
Go 渲染 HTML 时,应使用 html/template 并让普通用户输入保持 string 类型。本文说明上下文自动转义、属性与 URL 边界,以及 template.HTML 只能承载可信片段的使用条件。314 收藏 -
Go covermode 的选择取决于是否并发以及是否需要可靠执行次数:串行包/函数覆盖率用 set,并发计数或 -race 场景用 atomic。139 收藏 -
Go text/template 访问 .Profile.Name 失败时,先拆解点号路径和点号作用域,再区分字段、map 键、nil 值与执行错误,最后用 missingkey、with、index 稳定修复。486 收藏 -
Go 覆盖率统计到函数并不代表每个分支都执行。本文用表驱动测试区分包覆盖率、函数覆盖率和代码块报告,定位没有命中的分支。195 收藏 -
Go text/template 输出空字符串不一定是字段缺失。本文区分 map 缺键、空字符串和结构体零值,并用 missingkey=error、hasKey 与 index 给出可执行的排查和处理方式。204 收藏 -
go test -coverprofile 默认只分析正在测试的包。要把模块内子包纳入同一份报告,需要同时指定测试包列表和 -coverpkg=./...,再用 go tool cover 查看函数或 HTML 报告。178 收藏 -
Go text/template 默认可能忽略缺失 map 键。本文比较 missingkey 的三种策略,示范如何让必填键在 Execute 阶段直接返回错误,并处理可选字段。102 收藏 -
Go fuzz 最小化输入仍无法复现时,先核对失败日志中的 FuzzXxx/哈希、testdata corpus 路径和参数类型,再排查时间、随机数、全局状态与外部依赖,最后把稳定 corpus 固化为回归测试。236 收藏 -
Go 正则解析日志时,不要把 FindStringSubmatch 的数字下标散落在结构体初始化里。使用命名捕获组配合 SubexpIndex 建立字段映射,匹配失败返回错误,可选字段缺失保留零值,正则调整后更容易维护。436 收藏 -
Go fuzz 运行很慢时,先用 -run 和 -fuzz 只选一个目标,再用 -fuzztime 限制探索预算;语料保留能覆盖不同入口的种子,失败输入最小化另用 -fuzzminimizetime 控制,并按机器压力调整 -parallel。256 收藏 -
Go 的 FindStringSubmatch 返回 nil、空字符串和可选捕获组未命中并不是一回事。本文用命名捕获、SubexpIndex 和 SubmatchIndex 给出可靠判断方法。207 收藏 -
Go fuzz 测试发现失败输入后,会把最小化样例写入 testdata/fuzz/FuzzXxx。保留这个 corpus 文件,再用 go test -run 复现并纳入版本库,就能把随机发现的问题变成稳定回归用例。455 收藏