Golang 1.21.0版本因生成多个go build文件夹导致无法被杀毒软件排除
Golang 1.21.0版本因生成多个go build文件夹导致无法被杀毒软件排除 自从安装了 Go 1.21.0 后,我就一直无法使用它,因为我的杀毒软件会阻止它。我知道如何将其排除,但所有的 go build 文件夹都是随机生成的,而且数量众多,不可能全部排除。我可以排除父文件夹,但该文件夹不仅用于 Go,所以我仍然需要偶尔进行扫描。有没有办法配置 go-build,使其只在特定的 go-build 文件夹中编译?
错误信息: command-line-arguments: open C:\Users\user_name\AppData\Local\Temp\go-build3741852486\b001\exe\a.out.exe: Access is denied
每次 go build 文件夹都会变化。
更多关于Golang 1.21.0版本因生成多个go build文件夹导致无法被杀毒软件排除的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我曾尝试过其他具有类似系统的语言,例如 Rust,但只是通过排除我正在编码的文件夹来实现。
更多关于Golang 1.21.0版本因生成多个go build文件夹导致无法被杀毒软件排除的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在您的环境中使用 GOCACHE 示例: GOCACHE=C:\Go_workspace\go-build 然后将 C:\Go_workspace\go-build\ 从杀毒软件中排除
抱歉,如果我显得有点烦人,但它是安装目录下的那个文件夹吗?我是不是应该直接排除 go-build 所在的位置?
我对 Go 还比较陌生。
谢谢,但你能不能再详细解释一下。比如,我是需要在每个Go项目中都这样做,还是说这类似于AppData/Local中的go-build?另外,如果我每次都需要这样做,那么我每次该如何创建一个go-build文件夹呢?
我在开始工作前在命令行中设置了此项,并且在 vscode.bat 中也做了同样的设置(我使用一个批处理文件在运行前设置环境)。
这个 GOCACHE=C:\Go_workspace\go-build 是针对所有项目的。
此外,如果我再次尝试,会发生以下情况:command-line-arguments: open C:\Users\user_name\AppData\Local\Temp\go-build3979163904\b001\exe\main.exe: Access is denied。文件夹不同,因此我无法将其排除。
结合之前的原因,这让我认为是 Go 创建了过多构建文件夹导致的问题。
在Windows配置中全局设置 SET GOCACHE={你的文件夹}
或者
在CMD中开始构建前,创建一个.bat文件来设置此变量:
例如:
文件: gopath.bat
SET GOCACHE=C:\Go_workspace\go-build
SET GOPATH=C:\Go_workspace
SET GOROOT=C:\Go\bin
或者 在打开vscode.exe之前,创建一个.bat文件来设置这些变量: 文件: VsCode_GO.bat
SET Path=C:\php-snap-build\deps_aux\oracle\x64\instantclient_12_1;C:\MinGW64\mingw64\bin;C:\Go\bin;C:\Go_workspace\bin;C:\Users\amichelins\go\bin;…
SET CGO_CFLAGS=-IC:/php-snap-build/deps_aux/oracle/x64/instantclient_12_1/sdk/include/
SET CGO_LDFLAGS=-LC:/php-snap-build/deps_aux/oracle/x64/instantclient_12_1/sdk/lib/msvc -loci
SET GO111MODULE=auto
SET GOPATH=C:\Go_workspace
SET GOROOT=C:\Go\bin
SET GOCACHE=C:\Go_workspace\go-build
PKG_CONFIG_PATH=C:\Go_workspace\src\gopkg.in\rana\ora.v3\contrib
CD C:\Go_workspace\src
@echo off
cls && start /b C:\Soft\VSCode_go\Code.exe
这是一个Go 1.21.0版本中go-build临时目录随机化导致的杀毒软件兼容性问题。可以通过设置GOTMPDIR环境变量来指定固定的编译临时目录,然后让杀毒软件仅排除该目录。
解决方案:
- 设置固定的临时目录:
# Windows (PowerShell)
$env:GOTMPDIR = "C:\go-build-temp"
# 或者永久设置系统环境变量 GOTMPDIR=C:\go-build-temp
# Linux/macOS
export GOTMPDIR="$HOME/go-build-temp"
- 创建目录并设置权限:
// 可以在Go程序中确保目录存在
package main
import (
"os"
"path/filepath"
)
func init() {
tmpDir := os.Getenv("GOTMPDIR")
if tmpDir == "" {
tmpDir = "C:\\go-build-temp" // 默认路径
}
os.MkdirAll(tmpDir, 0755)
}
- 验证设置生效:
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
// 查看当前GOTMPDIR
fmt.Println("GOTMPDIR:", os.Getenv("GOTMPDIR"))
// 编译时会在指定目录生成临时文件
cmd := exec.Command("go", "build", "-x", ".")
output, _ := cmd.CombinedOutput()
fmt.Println(string(output))
}
- 对于持续集成或脚本:
# 在构建脚本开头设置
#!/bin/bash
export GOTMPDIR="$HOME/.go-build"
mkdir -p "$GOTMPDIR"
# 然后执行构建
go build -o myapp .
设置GOTMPDIR后,所有go build、go test、go run等命令的临时文件都会生成在指定目录中,而不是系统的临时目录。这样只需要在杀毒软件中排除这一个目录即可。
注意:确保指定的目录有足够的磁盘空间,因为Go编译过程中会生成大量临时文件。


