Go语言技术文章
-
Go 的 time.LoadLocation 返回 unknown time zone 时,先区分名称拼写问题与运行环境缺少 IANA 时区数据库,再按宿主机、容器和精简镜像选择修复方式。本文给出保留错误、加载嵌入时区数据和安全回退到 UTC 的实用写法。196 收藏 -
Go time.Time 写入 JSON 时,先用 In 固定业务时区,再按 RFC3339 或字段级自定义 MarshalJSON 输出稳定格式。351 收藏 -
Go 的 json.Decoder 面向 JSON 输入流,单次 Decode 成功不代表请求体已经结束。本文用第二次 Decode 严格要求 io.EOF,拒绝第二个 JSON 值、非法尾部字符和空请求体,并说明它与 DisallowUnknownFields、请求体大小限制的区别。312 收藏 -
Go JSON 解码后如何保留未知字段?比较 struct、动态 map 与 RawMessage,给出固定字段加扩展容器的完整写法,并解释合并冲突、数字精度、null 与嵌套字段的处理边界。412 收藏 -
Go 的 csv.Reader 默认会用第一条记录的字段数约束后续行,遇到缺列或多列就返回 ErrFieldCount。本文从故障现场、根因和修复动作出发,说明如何允许不定列数,并把缺列、额外列和真正的 CSV 格式错误分开处理。291 收藏 -
Go 的 bufio.Reader.Peek 可以查看协议头而不推进读取位置,适合在流式输入中先判断协议类型再决定后续解析。本文用固定协议头示例说明 Peek 的缓冲区上限、短读错误、返回切片有效期,以及确认后的 Read 和 Discard 用法。387 收藏 -
Go 的 os.ReadDir 默认按文件名返回目录项;如果业务还要按修改时间排序,应先读取 DirEntry.Info,再用稳定排序保留文件名作为平局规则。本文给出可直接改造的实现和错误处理边界。143 收藏 -
Go sqlmock 的动态时间参数不适合做精确值比较。本文实现 Argument 匹配器,只约束 time.Time 类型,同时保留 SQL 和固定参数的精确断言。323 收藏 -
说明goquery空选择集调用Attr和Eq的返回行为,区分无节点、缺失属性与空属性值,并用完整Go示例建立必填字段错误边界。377 收藏 -
Go Expr 规则访问可选指针字段时,先用 nil 条件保护成员访问,再复用编译后的 program;同时区分 Compile、Run、未定义变量和关闭短路的边界。243 收藏 -
通过 NewOption 配对中文标签与稳定编码,用 Select 泛型和 Value 指针绑定接收业务值,结合最小示例说明默认值、错误处理和任务消费边界。127 收藏 -
Go sqlmock 适合锁定 SQL 调用、参数和事务契约,真实数据库测试则负责发现方言、模式、约束、索引与事务环境问题。本文用一张边界表说明两者各自能发现什么,以及如何组合回归。135 收藏 -
Golang · Go问答 | 1星期前 | 并发 · 单元测试 · 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 收藏