Go语言技术文章
-
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 收藏 -
Go regexp 支持命名捕获组,适合解析带可选字段的日志和配置文本。本文用 SubexpNames、SubexpIndex 和 FindStringSubmatch 区分整体不匹配、可选字段缺失与业务默认值。252 收藏 -
Go 多包测试中,TestMain 不是全局入口:每个包拥有独立测试二进制。本文说明 m.Run 返回码、清理逻辑和 os.Exit 的边界,避免初始化重复、defer 不执行和失败状态丢失。125 收藏 -
Go 中不要把 URL 当普通字符串拼接:路径片段用 URL.JoinPath,查询参数用 url.Values,并且每个动态值只在所属语义层编码一次。149 收藏 -
Go TestMain 初始化失败不能只写 return,否则测试入口可能按 m 的默认退出状态结束。本文说明 m.Run、资源清理、flag.Parse 与 os.Exit 的正确组合。227 收藏 -
Go 处理回调地址时,Path、RawPath、EscapedPath 和 RawQuery 的语义并不相同。本文用 net/url 示例说明路径解码、查询参数、编码斜杠以及 PathEscape 与 QueryEscape 的正确边界。307 收藏 -
Go TestMain 中直接调用 os.Exit 会跳过 defer 清理。本文拆解 m.Run、TestMain 返回和测试包装器的关系,给出失败时仍释放资源、同时保留正确退出码的写法。184 收藏 -
Go net/url 处理中,查询参数、动态路径片段和完整 URL 不能共用一种编码方式。本文用 url.Values、QueryEscape、PathEscape 与 EscapedPath 说明如何只编码查询参数并保留路径斜杠。347 收藏