Golang中临时文件夹的杀毒软件排除设置
Golang中临时文件夹的杀毒软件排除设置 最近在 Windows 11 上遇到了构建时间长得离谱的问题,我怀疑这与杀毒软件有关。
我正在寻找一份官方列表,列出可以添加到排除列表中的位置,或者关于如何正确排除 Go 及相关构建功能的说明。
是否有这样的列表存在?
这很有趣。而且我猜微软并没有记录这两个选项在底层具体做了什么。 但至少你有了一个变通方案。
更多关于Golang中临时文件夹的杀毒软件排除设置的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我不知道有这样的列表,但我认为可能只需将 %GOPATH% 和当前项目目录从杀毒软件扫描中排除即可。
(%GOPATH% 包含下载模块的缓存以及构建产物。)
如果您使用 go run,可能需要将创建二进制文件的临时文件夹添加到排除列表中。go debug 通常也会创建一个临时文件来执行。
您也可以尝试使用 go build,然后运行生成的文件,以确定是构建过程缓慢还是二进制文件的执行缓慢。
这些方法仍然无效。可能还有其他位置,或者可能是Go在内存中的操作方式。我找到的唯一解决方法是,在Windows安全中心禁用以下选项: 云提供的保护 自动提交样本 禁用这些选项后,Go的构建速度又恢复了。
func main() {
fmt.Println("hello world")
}
我们可以做一个有根据的猜测:当你尝试运行你的 .go 文件时,它在执行前会暂停,将你的二进制文件上传到微软的服务器进行扫描,等待批准,然后才开始执行。第一次运行新应用程序时这或许可以接受,但显然,每次执行 go build/test/run 时都重复这个过程会非常烦人。
我认为,既然现在默认启用了这个功能,Go 社区或许应该考虑为 Windows 版本更新安装程序和/或文档。
在Windows上,杀毒软件确实会显著影响Go构建性能,尤其是涉及大量小文件操作时。以下是需要排除的关键目录和路径:
1. Go安装目录
// 默认安装路径
C:\Program Files\Go\
C:\Users\<用户名>\go\ // GOPATH目录
2. 临时目录
// Go编译使用的临时目录
%TEMP%\go-build\
%LOCALAPPDATA%\Temp\go-build\
C:\Users\<用户名>\AppData\Local\Temp\go-build\
// 使用代码获取临时目录
package main
import (
"fmt"
"os"
)
func main() {
// 获取Go使用的临时目录
tmpDir := os.TempDir()
fmt.Printf("系统临时目录: %s\n", tmpDir)
// Go构建临时目录通常是
goBuildDir := tmpDir + "go-build"
fmt.Printf("Go构建目录: %s\n", goBuildDir)
}
3. 模块缓存目录
// Go模块缓存(重要!)
%GOPATH%\pkg\mod\
C:\Users\<用户名>\go\pkg\mod\
// 通过环境变量获取
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
// 获取模块缓存目录
if gopath := os.Getenv("GOPATH"); gopath != "" {
modCache := filepath.Join(gopath, "pkg", "mod")
fmt.Printf("模块缓存: %s\n", modCache)
}
// 或者使用go env获取
fmt.Println("运行: go env GOMODCACHE")
}
4. 构建缓存目录
// Go 1.20+ 构建缓存
%LOCALAPPDATA%\go-build\
C:\Users\<用户名>\AppData\Local\go-build\
// 检查构建缓存位置
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("go", "env", "GOCACHE")
output, _ := cmd.Output()
fmt.Printf("构建缓存: %s", output)
}
5. 项目相关目录
// 你的项目目录
D:\projects\your-project\** // 使用通配符排除整个项目
// vendor目录(如果使用)
your-project\vendor\
设置示例
对于Windows Defender,使用PowerShell添加排除:
# 添加Go安装目录
Add-MpPreference -ExclusionPath "C:\Program Files\Go"
# 添加临时构建目录
Add-MpPreference -ExclusionPath "$env:TEMP\go-build"
# 添加模块缓存
Add-MpPreference -ExclusionPath "$env:GOPATH\pkg\mod"
# 添加构建缓存
Add-MpPreference -ExclusionPath "$env:LOCALAPPDATA\go-build"
验证排除效果
创建测试程序验证构建速度:
// build_test.go
package main
import (
"fmt"
"time"
)
func main() {
start := time.Now()
// 触发大量编译操作
for i := 0; i < 100; i++ {
_ = fmt.Sprintf("test%d", i)
}
elapsed := time.Since(start)
fmt.Printf("构建测试完成,耗时: %v\n", elapsed)
}
排除这些目录后,Go构建性能通常会有显著提升。建议按照上述顺序逐步添加排除项,并测试每次更改后的构建时间。

