Go语言技术文章
-
Golang · Go问答 | 3星期前 | 并发 · 单元测试 · go · database/sql Go sqlmock MatchExpectationsInOrder 并发查询测试 预期顺序
Go sqlmock 默认按预期注册顺序匹配,多个 goroutine 并发查询时,实际到达顺序可能不同,测试就会误报。本文说明如何用 MatchExpectationsInOrder(false) 解除不必要的顺序约束,同时保留 SQL 和参数匹配,并区分事务等必须有序的场景。313 收藏 -
Go sqlmock 默认把预期 SQL 当正则表达式处理,问号和括号会改变匹配语义。本文说明如何用 regexp.QuoteMeta 或 QueryMatcherEqual 修复测试。295 收藏 -
用 Go sqlmock 模拟事务第二次写入失败,按 Begin、Exec、Rollback 的顺序验证错误返回和回滚动作,避免测试误把提交当成成功。475 收藏 -
在 Go sqlmock 查询期望上配置 RowsWillBeClosed,并在函数返回后检查 ExpectationsWereMet。本文用提前返回的最小测试说明结果集关闭、自动关闭边界及资源责任的排查方法。133 收藏 -
Golang · Go问答 | 3星期前 | 结构体 · 单元测试 · go · 结构体比较 Go go-cmp cmp.Equal Equal方法 cmp.Transformer cmp.Comparer
go-cmp 的 cmp.Equal 在没有被选项覆盖时,会优先调用符合签名的 Equal 方法,因此不会继续逐字段比较。本文拆解这个决策顺序,并给出用 Transformer 去掉 Equal 方法、或用 Comparer 明确覆盖的测试写法。296 收藏 -
Go go-cmp 比较 nil 切片与非 nil 空切片时默认保留状态差异。本文用最小项目说明 EquateEmpty 的使用方式、Equal 与 Diff 的统一配置,以及不应全局忽略空值差异的业务边界。367 收藏 -
go-cmp 比较含未导出字段的结构体时 panic 不是库失效,而是默认拒绝猜测内部字段语义。本文按字段用途选择 IgnoreUnexported、自定义 Comparer 或 AllowUnexported。438 收藏 -
用 cmpopts.EquateApprox 为 go-cmp 配置相对容差、绝对容差和接近零时的兜底边界,并说明 Equal、Diff、float32、NaN 与无穷大的排查方法。442 收藏 -
Go 的 cmp.Equal 默认按切片下标比较,元素相同但顺序不同仍会判不等。本文用 cmpopts.SortSlices 为基本类型和结构体切片提供确定性排序规则,并说明重复元素、nil 与空切片的边界。162 收藏 -
Go csvutil 按表头名称和 csv 标签匹配独立字段,而非依赖结构体位置。通过双样本小项目解释列重排,并说明无表头、表头失配和自定义字段依赖的边界。200 收藏 -
Go csvutil 解码 CSV 空字段时,普通值会得到类型零值,指针字段会得到 nil;本文用对照示例说明 omitempty、结构体复用和缺失状态的处理边界。475 收藏 -
测试里用 time.Now 生成的时间字段会让 got 和 want 每次都不一样。本文只围绕 go-cmp 解释如何用 cmpopts.IgnoreFields 忽略指定字段,同时保留其它业务字段的差异,并区分时间容差比较、嵌套字段路径和全局忽略类型的边界。363 收藏 -
csvutil 遇到 CSV 表头缺少结构体字段时,默认会保留字段零值;若业务要求表头完整,可打开 DisallowMissingColumns,让 Decode 返回 MissingColumnsError。本文还区分行字段缺失与表头缺失,并给出宽松导入、严格导入和多余列处理方案。220 收藏 -
用 Go csvutil 编写逐条解码库存 CSV 的统计工具,只保留当前结构体与计数器,说明 EOF、表头、空字段和下游持有方式为何影响真正的流式处理。327 收藏 -
Go csvutil 处理 HexID、业务枚举等非基础字段时,可以用 UnmarshalCSV/MarshalCSV 或注册转换器统一文本格式。本文按升级变更单的方式比较旧写法与新写法,说明错误处理、注册优先级和回归检查。326 收藏