Golang新手常见问题解答

Golang新手常见问题解答

有个小问题。我使用VSCode作为编辑器并在终端中运行代码。每次运行代码时,我的杀毒软件都会不断检查它。我是Go语言的新手,不太清楚编译型语言是什么。我了解Python,但在编辑器中运行Python时不会出现这种情况。提前感谢
6 回复

我找到了一个解决方法。将在另一个帖子中发布解决方案。谢谢

更多关于Golang新手常见问题解答的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我不太确定,需要去核实一下。感谢提供的信息。

这是因为每次运行都会创建一个新的可执行文件。你能告诉你的杀毒软件不要报告"正常"的内容吗?

使用 go run 运行 Go 程序等同于先将程序编译到临时目录,然后运行编译后的程序。杀毒软件每次都会询问您该程序是否安全吗?

不,它只是扫描一下然后说没问题。这比什么都烦人。我主要想知道它为什么要这样做。有没有办法绕过这个?

这是一个很常见的问题,尤其对于从 Python 这样的解释型语言转向 Go 的开发者来说。原因在于 Go 是一种编译型语言,而 Python 是解释型语言。让我详细解释一下。

为什么杀毒软件会检查 Go 程序?

在 Go 中,当你运行代码(例如使用 go run main.go)时,Go 工具链会先将你的源代码编译成一个可执行文件(通常是临时的),然后执行该文件。这个可执行文件是二进制的,类似于你从网上下载的软件。杀毒软件通常会监控新创建或执行的可执行文件,以检测潜在的恶意软件。相比之下,Python 是解释型语言:当你运行 Python 脚本时,Python 解释器逐行读取并执行代码,不会生成独立的可执行文件,因此杀毒软件通常不会触发警报。

如何解决这个问题?

你可以将 Go 编译的可执行文件添加到杀毒软件的排除列表或信任列表中。具体步骤取决于你的杀毒软件(例如 Windows Defender、Norton 等),但一般流程如下:

  1. 打开杀毒软件设置。
  2. 找到“排除项”或“信任列表”部分。
  3. 添加 Go 的工作目录(例如你的项目文件夹)或生成的临时可执行文件路径(通常在系统临时目录中,如 %TEMP% 在 Windows 上)。

另外,你可以尝试直接编译代码为可执行文件,然后运行它,而不是使用 go run。这可以减少临时文件的生成频率。例如:

go build -o myapp main.go
./myapp  # 在 Linux/macOS 上,或 myapp.exe 在 Windows 上

这样,杀毒软件可能只在编译时检查一次,而不是每次运行都检查。

示例:Go 编译过程

假设你有一个简单的 Go 文件 main.go

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

当你运行 go run main.go 时,Go 会在后台执行以下步骤:

  • 编译代码到一个临时可执行文件(例如在 /tmp%TEMP%)。
  • 执行该文件。
  • 删除临时文件(如果使用 go run)。

编译型语言如 Go 会生成机器代码,而解释型语言如 Python 依赖解释器。这解释了为什么 Go 会触发杀毒软件的行为。如果你经常更改代码,建议将整个项目目录添加到杀毒软件排除项中,以避免干扰开发流程。

回到顶部