添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

解决 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 上启动服务