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

时间:2019-03-16 21:16:23

标签: go windows-firewall

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

go run main.go

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

8 个答案:

答案 0 :(得分:11)

改变

http.ListenAndServe(":3000", r)

http.ListenAndServe("127.0.0.1:3000", r)

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

答案 1 :(得分:3)

嗨,我遇到了同样的问题: 试试这个:

  1. 转到Windows Defender 防火墙,在左侧菜单中您会看到入站规则,单击此处,然后在右侧菜单中您会看到新规则...< /strong> 点击。
  2. 选择端口从窗口打开 -> 下一步 选择TCP,然后定义你想要的端口我选择8080再次点击下一步,选择允许连接下一步,检查所有下一步给任何名字Goland或任何你想要的名字,然后按完成。就这样

答案 2 :(得分:1)

如果您正在呼叫go run main.go,则正在发生以下情况:

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

但是临时文件夹仅用于一次执行。因此,下次您通过go run运行程序时,将使用另一个文件夹。

Windows防火墙确实会始终为您提供服务器所具有的路径的信息,如果您每次都记住路径,就会发现总是存在不同的路径。

Windows防火墙的配置方式如此,以至于它可以记住每个程序的路径。因此,当路径更改时,您始终需要确认允许 new 路径在该端口上运行。

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

答案 3 :(得分:1)

基于@apxp 答案

windows cli 这对我有用

go build main.go && main.exe

答案 4 :(得分:1)

这对我有用

go build main.go && .\main.exe

并使用 makefile 运行

答案 5 :(得分:0)

我认为@apxp的答案是对情况的完整解释;问了这个问题一段时间后,我找到了一种使用以下方式运行应用程序的方法:

go build -o ejecutable.exe ; if($?)  { .\ejecutable.exe }

答案 6 :(得分:0)

只需转到Windows防火墙通知设置:

Control Panel -> Windows Defender Firewall -> Change notification settings

取消选中 Windows Defender防火墙阻止新应用时通知我的选项,以防止其显示弹出窗口。

答案 7 :(得分:0)

您可以使用 CompileDaemon 在文件更改时自动重新构建您的项目,因为无论如何它都会运行构建,您只需要接受一次。此外,您的项目将自动重新构建!

安装:

go get https://github.com/githubnemo/CompileDaemon

示例用法:

# Assuming your project looks like and you're in your project working dir
# hello/
#   hello.go

# Rebuild on .go file edits and run the hello command after
CompileDaemon -command="./hello"