Golang连接MongoDB报‘no reachable servers’错误的排查方案
问题:执行
go run main.go出现"no reachable servers"错误的排查方案 按照YouTube教程操作,执行go run main.go后出现"no reachable servers"错误,请问该如何排查此问题?是否需要将localhost替换为MongoDB URI?以下是我的源代码:
var rnd *renderer.Render var db *mgo.Database const ( hostName string = "localhost" dbName string = "demo_todo" collectionName string = "todo" port string = ":3000" ) func init() { rnd = renderer.New() sess, err := mgo.Dial(hostName) checkErr(err) sess.SetMode(mgo.Monotonic, true) db = sess.DB(dbName) } func main() { stopChan := make(chan os.Signal, 1) signal.Notify(stopChan, os.Interrupt) r := chi.NewRouter() r.Use(middleware.Logger) r.Get("/", homeHandler) r.Mount("/todo", todoHandlers()) srv := &http.Server{ Addr: port, Handler: r, ReadTimeout: 60 * time.Second, WriteTimeout: 60 * time.Second, IdleTimeout: 60 * time.Second, } go func() { log.Println("Listening on port ", port) if err := srv.ListenAndServe(); err != nil { log.Printf("listen: %s\n", err) } }() }
排查方案与解决办法
确认MongoDB服务是否运行
先检查本地MongoDB服务状态:- Windows:打开「服务」列表,找到MongoDB服务,确认状态为「正在运行」,未启动则手动启动。
- Mac(brew安装):执行
brew services list查看MongoDB状态,未启动则用brew services start mongodb-community启动。 - Linux:执行
systemctl status mongod,未启动则用sudo systemctl start mongod启动。
检查MongoDB连接地址是否正确
代码里的localhost仅适用于本地默认端口(27017)运行的MongoDB:- 若使用远程MongoDB服务(如MongoDB Atlas),必须把
hostName替换成完整的MongoDB URI,格式类似mongodb+srv://<用户名>:<密码>@集群地址/。 - 若本地MongoDB修改了默认端口,地址要写成
localhost:自定义端口,比如localhost:27018。
- 若使用远程MongoDB服务(如MongoDB Atlas),必须把
验证MongoDB连接是否正常
用MongoDB官方工具mongosh测试连接:执行mongosh localhost,若能进入交互界面,说明服务和地址没问题;若连接失败,根据报错信息排查(如端口被占用、防火墙拦截)。优化代码错误提示
修改init函数里的错误处理,输出更详细的连接失败信息:sess, err := mgo.Dial(hostName) if err != nil { log.Fatalf("MongoDB连接失败: %v", err) }这样能获取更具体的失败原因,帮助快速定位问题。
内容的提问来源于stack exchange,提问作者Shift_that
相关产品推荐
相关产品推荐

