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

Golang使用fiber对接MongoDB调用Find方法报client is disconnected错误

问题根因

你在database/db.go的connectToMongo函数中添加了defer client.Disconnect(ctx)逻辑,该延迟调用会在connectToMongo函数执行完毕返回时自动触发,直接将MongoDB客户端连接断开。后续业务层调用database.DB操作数据库时,对应的客户端已经被关闭,自然会抛出Client is disconnected错误。

修复方案

直接删除connectToMongo函数里的defer client.Disconnect(ctx)这行代码即可。MongoDB官方客户端自带连接池管理,不需要在初始化连接阶段就设置自动断开逻辑,仅需要在进程退出前主动调用Disconnect释放资源即可,服务正常运行过程中保持客户端长连接即可。

可选优化建议
  • 可以把MongoDB客户端实例也暴露为全局变量,方便后续进程退出时调用Disconnect释放资源,比如在database包新增var Client *mongo.Client,初始化时完成赋值,主函数中监听退出信号时调用database.Client.Disconnect(context.Background())
  • 原有初始化逻辑中context.WithTimeout对应的cancel调用可以保留,该逻辑是用来控制初始化连接的超时时间,不存在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 05:12:02