Go问答技术文章
-
Go SQLX MapScan 适合读取列名不固定的查询结果。本文给出 Queryx、MapScan、Rows.Close 和 Rows.Err 的配合写法,并说明重复列名、NULL 值以及与 StructScan、SliceScan 的取舍。455 收藏 -
Go SQLX StructScan 报 missing destination name,通常不是数据库连接失败,而是查询返回列无法和目标结构体字段映射。本文用一个小型订单查询说明 db 标签、SQL 别名、Mapper 和 Unsafe 的正确边界。357 收藏 -
解释 Gock 全局规则池与默认拦截状态为何使并发用例互相影响,通过完整串行测试示例管理配置、请求、检查及清理,并说明独立 Client 和不同 URL 的隔离局限。273 收藏 -
解释 Go Gock 的 Persist 为什么会影响后续测试,区分默认 mock、Times 次数限制与持久 mock,并给出 Off 和 RestoreClient 的测试隔离写法。428 收藏 -
解释 Gock 为什么在没有匹配 mock 时直接返回错误,梳理 FIFO 匹配、默认网络隔离、自定义 http.Client 拦截与未匹配请求排查方法。159 收藏 -
解释 Testify mock 调用记录中的可变引用为何影响事后断言,通过 Run 回调复制调用时字段,区分匹配器、调用次数、独立快照及切片映射的复制和并发边界。325 收藏 -
Testify 的 mock.AnythingOfType 比较的是运行时类型名。本文区分 Go 类型别名与定义类型,说明包限定名称、指针和 MatchedBy 的正确用法。231 收藏 -
说明 Go Lumberjack 的 LocalTime 为什么只影响轮转备份文件名,并用标准库 log 和自定义 formatter 分别配置日志正文时间格式。317 收藏 -
解释 Go Testify 的 AssertExpectations 为什么只能证明声明的 mock 期望被满足,不能单独证明调用次数完全正确,并用 Once、Times、AssertNumberOfCalls 和参数匹配清单补齐测试约束。440 收藏 -
解释 Go Lumberjack 的 MaxSize 为什么只限制当前日志文件,并区分 MaxBackups、MaxAge、压缩备份与目录中其它文件,给出目录总量排查和组合配置方法。190 收藏 -
解释 Lumberjack 多进程共用轮转文件时实例锁、句柄和归档管理无法协调的原因,给出独占目录初始化示例,并说明多副本命名、迁移与目录容量管理。104 收藏 -
Go Zap SugaredLogger 的 Infow、Errorw 等结构化日志方法接收可变键值参数。参数数量为奇数时,开发环境会触发 panic,生产环境会记录错误并跳过孤立键;本文给出边界检查、zap.Field 和排查字段丢失的实用写法。292 收藏 -
Zap 的 AddCallerSkip 不是修改日志内容,而是调整调用位置计算时跳过的栈帧数量。本文用包装器层数解释 skip 偏小、偏大和重构后的归因风险,并给出集中配置方式。155 收藏 -
Zap 默认按时间窗口内的日志等级和消息进行采样分组,request_id、用户和延迟等字段只是上下文。本文解释这种设计如何避免高基数字段打散采样,并说明 first、thereafter 与独立 Core 的使用边界。134 收藏 -
说明 Zerolog UpdateContext 修改共享上下文的并发风险,用完整 Go 示例派生任务局部子日志器,区分结构体浅拷贝、事件字段、Writer 同步及回滚观察项。230 收藏