You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go测试GetCats查询MySQL报空指针但Postman/Curl请求正常如何解决

问题根因

你遇到的空指针panic完全是单元测试的初始化遗漏导致的,和你写的COALESCE逻辑没有关系:

  • 用Postman调用时,你已经提前启动了完整服务,服务启动阶段会执行数据库连接初始化逻辑,给全局Db变量赋值为有效连接对象,因此调用Db.Query不会有问题。
  • 执行单元测试时,Go测试框架只会执行测试文件内的相关逻辑,不会自动运行你服务启动时的数据库初始化代码,此时全局Db变量还是零值nil,调用nil.Query()直接触发空指针panic。
修复方案

方案1:快速适配现有代码

在TestGetCats函数开头添加和生产环境一致的数据库初始化逻辑,确保Db被正确赋值后再执行接口调用,建议连接本地测试库避免影响生产数据。同时你现在的业务代码中没有处理Db.Query返回的err,建议补上错误判断避免后续其他异常触发panic。

方案2:更规范的单元测试写法

重构handler逻辑,用依赖注入替代全局Db对象:将数据库连接作为handler结构体的成员传入,单元测试时可以用mock数据库工具模拟数据库返回,不需要依赖真实的MySQL实例,测试运行更快且结果稳定。

内容的提问来源于stack exchange,提问作者sensazn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:06:04