GoLand 本地调试被 Windows 防火墙拦截是因为其启动的 Go 进程默认监听 0.0.0.0:8686 等端口,触发防火墙对 TCP/UDP 的双重检测,需同时放行对应端口的 TCP 和 UDP 入站规则,或改用 127.0.0.1 绑定以避免弹窗。

GoLand 本地调试时为什么会被 Windows 防火墙拦截
因为 GoLand 启动的 Go 进程(如 go run main.go 或调试器注入的临时二进制)默认监听 0.0.0.0:8686 或类似端口,Windows 防火墙将其识别为“新网络应用”,且未区分 TCP/UDP 流量类型——即使你的 Go 服务只显式用了 TCP,net.DialContext、DNS 解析、健康检查等标准库行为仍会触发 UDP 探测包(尤其是向 localhost:8686 发 UDP),导致反复弹窗。
必须同时放行 TCP 和 UDP 端口才能稳定调试
仅添加 TCP 入站规则是无效的。GoLand 调试器在建立调试会话、加载远程包信息或触发 http.DefaultClient 重定向逻辑时,可能向目标端口发 UDP 包。Windows 防火墙对 UDP 的默认策略更严格,不显式放行就会丢包并弹窗。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 打开「高级安全 Windows 防火墙」→「入站规则」→「新建规则」
- 选择「端口」→「TCP」→ 输入具体端口(如
8686)→ 允许连接 → 命名为GoLand-TCP-8686 - 重复新建规则,但这次选「UDP」→ 同样输入
8686→ 命名为GoLand-UDP-8686 - 两条规则的「配置文件」都勾选「域」「专用」「公用」(开发机通常全选)
- 确认规则「已启用」,且作用范围是「任何 IP 地址」(不要限制为 127.0.0.1,否则调试器无法回连)
更安全的替代方案:强制 Go 程序只监听 127.0.0.1
比改防火墙更可靠的做法,是在 Go 代码中显式绑定回环地址。这样既避免弹窗,又不降低安全性——GoLand 调试器和浏览器都在本机,完全不需要监听外部接口。
- 把
http.ListenAndServe(":8080", handler)改成http.ListenAndServe("127.0.0.1:8080", handler) - 若用
net.Listen("tcp", ":8686"),改成net.Listen("tcp", "127.0.0.1:8686") - Beego 框架需设置
beego.BConfig.Listen.HTTPAddr = "127.0.0.1" - 注意:此方式下,其他机器无法访问该服务,但 GoLand 调试、Postman 本地测试、curl localhost 均不受影响
GoLand 自身的网络行为也要被信任
GoLand IDE 本身会启动多个后台服务:内置 HTTP 服务器(用于文档预览)、Go SDK 分析器、代理下载器(如 jetbrains-clients-downloader)。这些组件若在离线环境运行,可能尝试连接 JetBrains 内网地址并触发防火墙。
- 在 GoLand 设置里关闭非必要联网功能:Settings → Appearance & Behavior → System Settings → Updates → 取消勾选「Check for updates automatically」
- 禁用内置文档服务器:Settings → Languages & Frameworks → Go → Documentation → 取消「Show documentation in tooltip」
- 若使用离线 SDK,确保
GOROOT指向本地解压路径,而非通过 GoLand 自动下载(后者会触发 HTTPS 出站请求)
127.0.0.1 虽然简单,但必须确保所有 Listen 调用都被覆盖——包括第三方库隐式启动的监听(如某些 gRPC server 默认绑 0.0.0.0)。

















