Golang连接MongoDB报错panic: no reachable servers求助
解决MongoDB连接报错「panic: no reachable servers」
已做排查:
- MongoDB服务处于运行状态
- 端口填写正确
- 查阅mgo.Dial官方文档确认语法无误
- 参考相关方案修改代码后仍无法解决
报错日志
执行go run main.go输出:
panic: no reachable servers goroutine 1 [running]: main.getSession(...) /home/beton/work/github.com/user/mongo-golang/main.go:30 main.main() /home/beton/work/github.com/user/mongo-golang/main.go:15 +0x1c5 exit status 2
问题代码(main.go)
package main import ( "net/http" "github.com/julienschmidt/httprouter" "gopkg.in/mgo.v2" "github.com/betonomochalka/mongo-golang/controllers") func main() { r := httprouter.New() uc := controllers.NewUserController(getSession()) r.GET("/user/:id", uc.GetUser) r.POST("/user", uc.CreateUser) r.DELETE("/user/:id", uc.DeleteUser) http.ListenAndServe("localhost:8080", r)} func getSession() *mgo.Session { s, err := mgo.Dial(":27017") } if err != nil { panic(err) } return s }
环境验证
- 执行
sudo systemctl status mongod显示服务运行:
Active: active (running) since Mon 2024-03-18 00:02:58 CET; 57min ago
- 执行
mongosh可正常连接:
Current Mongosh Log ID:65f7848e2d998360b9db83af Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.0 Using MongoDB: 7.0.6 Using Mongosh: 2.2.0
问题分析与解决
你的代码存在函数结构语法错误:getSession函数的花括号提前闭合,导致错误处理和返回语句都在函数体外,函数实际没有返回有效的Session,也没有正确处理连接错误。
修正后的代码
package main import ( "net/http" "github.com/julienschmidt/httprouter" "gopkg.in/mgo.v2" "github.com/betonomochalka/mongo-golang/controllers" ) func main() { r := httprouter.New() uc := controllers.NewUserController(getSession()) r.GET("/user/:id", uc.GetUser) r.POST("/user", uc.CreateUser) r.DELETE("/user/:id", uc.DeleteUser) http.ListenAndServe("localhost:8080", r) } func getSession() *mgo.Session { // 明确指定127.0.0.1,避免DNS解析问题 s, err := mgo.Dial("127.0.0.1:27017") if err != nil { panic(err) } return s }
关键修正点
- 调整
getSession函数的花括号位置,将错误处理和return语句纳入函数体内 - 将
mgo.Dial的参数从:27017改为127.0.0.1:27017,明确指定IPv4地址,避免部分环境下的地址解析问题
内容的提问来源于stack exchange,提问作者betonomochalka
相关产品推荐
相关产品推荐

