Go语言技术文章
-
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 收藏 -
Go regexp 支持命名捕获组,适合解析带可选字段的日志和配置文本。本文用 SubexpNames、SubexpIndex 和 FindStringSubmatch 区分整体不匹配、可选字段缺失与业务默认值。252 收藏 -
Go 多包测试中,TestMain 不是全局入口:每个包拥有独立测试二进制。本文说明 m.Run 返回码、清理逻辑和 os.Exit 的边界,避免初始化重复、defer 不执行和失败状态丢失。125 收藏 -
Go 中不要把 URL 当普通字符串拼接:路径片段用 URL.JoinPath,查询参数用 url.Values,并且每个动态值只在所属语义层编码一次。149 收藏