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

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
}

关键修正点

  1. 调整getSession函数的花括号位置,将错误处理和return语句纳入函数体内
  2. 将mgo.Dial的参数从:27017改为127.0.0.1:27017,明确指定IPv4地址,避免部分环境下的地址解析问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:52:48