Golang 在 Windows 上运行,无需处理防火墙

est*_*ezg 15 windows-firewall go

我正在使用 Go 开发 Rest API,但每次我尝试运行我的应用程序时

go run main.go
Run Code Online (Sandbox Code Playgroud)

Windows 防火墙告诉我已阻止我的应用程序的某些功能。我想知道是否有某种方法可以使我执行死刑而不必每次都接受

小智 24

您好,我遇到了同样的问题:尝试一下:

  1. 转到Windows Defender 防火墙,在左侧菜单中您会看到“入站规则”,单击此处,然后在右侧菜单中您将看到“新规则...”,单击。
  2. 选择从窗口打开的端口 ->下一步 选择 TCP,然后定义您想要的端口我选择 8080再次单击下一步,选择允许连接 下一步,选中全部下一步给出任何名称Goland 或您想要的任何名称,然后按完成。就是这样


jef*_*nte 19

改变

http.ListenAndServe(":3000", r)
Run Code Online (Sandbox Code Playgroud)

http.ListenAndServe("127.0.0.1:3000", r)
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是大猩猩复用器

  • 当您将其部署到生产服务器时,不要忘记将其设置回 http.ListenAndServe(":3000", r) 。除非您使用反向代理,否则您将无法远程访问它。让我头痛了几个小时,然后我才意识到这就是原因:) (10认同)
  • `http.ListenAndServe("localhost:3000", r)` 也为我工作 (9认同)

apx*_*pxp 14

如果您正在拨打go run main.go以下电话:

  • 你的程序编译在一个临时文件夹中
  • 编译后的二进制文件被执行

但临时文件夹仅用于一次执行。所以下次当你通过go run另一个文件夹运行你的程序时会使用。

Windows 防火墙确实始终为您提供服务器具有的路径的信息,如果您记得每次之后的路径,您将看到总是有不同的路径。

Windows 防火墙配置得如此之好,以至于它记住了每个程序的路径。因此,当路径发生变化时,您将始终需要确认允许路径在该端口上运行。

要解决此问题,您应该编译您的服务器。只需运行go build并执行二进制文件,然后在您的项目文件夹中即可。那么你只需要接受一次。

  • 这很好地解释了为什么会发生这种情况,但我认为除了构建程序之外,@the Mage 有更好的解决方案来解决问题。 (2认同)