解决 Mac 上 Gin 服务每次 Build 后都会弹出【你要应用程序“main”接受传入网络连接吗?】
Windows 上也有同样的问题,会弹出允许应用通过防火墙/网络的弹窗,非常烦人
发布于 星期四,三月 21 2024
在学 Gin 的时候,发现每次修改完代码重新启动服务的时候,不管是在 Mac 还是在 Windows 上,都会弹窗,让你允许 ”main“xxx 什么的,只不过两个平台的弹窗表现不一样。这个弹窗非常烦人,我就想着怎么才能不让它弹这个窗,经过一番 Google,解决了,这里做个记录。
烦人的弹窗
Windows上
后来我在
Gin
的这个 issue 下找到问题的答案,解释了原因—— 使用0.0.0.0
(0.0.0.0代表本机上任何IP地址)时,会触发防火墙我们来看看
Gin
是怎么启动服务的,下面是来自 Gin文档-快速入门 的一段代码
package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", r.Run() // 监听并在 0.0.0.0:8080 上启动服务
可以看到
r.Run()
函数后有一段注释——”监听并在 0.0.0.0:8080 上启动服务“。Gin
默认帮我们设置的监听是0.0.0.0
地址,而监听0.0.0.0
地址时会触发防火墙策略,所以出现了弹窗,要我们允许xxx这篇文章也提到了解决方案MAC上使用air时,每次重新build之后都会弹出“您要应用程序“main”接受传入网络连接吗?” ,但是并没有解释为什么换成
127.0.0.1
就能行了
Gin
底层肯定用的还是Go的http
包里的ListenAndServe
方法来启动的。所以在使用原生的
http
包启动服务时,也会出现上述的问题// ...省略代码 http.ListenAndServe(":8080", nil) // 监听的是0.0.0.0:8080,也会弹窗 // ...省略代码 // 可以改成 http.ListenAndServe("localhost:8080", nil)
知道了是因为默认监听的是
0.0.0.0
地址而导致出现弹窗的,问题就好解决了。手动修改 Gin
监听的地址为localhost
或者127.0.0.1
。在Run函数内我们这样写import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", r.Run("localhost:8080") // 监听并在 localhost:8080 上启动服务 // 或者 // r.Run("127.0.0.1:8080") // 监听并在 127.0.0.1:8080 上启动服务