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

9 回复

我曾尝试过其他具有类似系统的语言,例如 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 创建了过多构建文件夹导致的问题。

你或许可以尝试联系你的杀毒软件技术支持,因为这可能更多是关于杀毒软件的问题,而并非专门与 Go 相关。

GitisAwesome: 有没有办法配置 go-build,让它只在特定的 go-build 文件夹中进行编译?

我的意思是——你可以创建一个类似“c:\buildartifacts”的文件夹,然后告诉你的杀毒软件忽略它。之后你就可以使用 go build -o c:\buildartifacts\myprogram.exe 命令。不过,我不完全确定这是否能解决你的问题,或者我是否正确理解了你的意思。

在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环境变量来指定固定的编译临时目录,然后让杀毒软件仅排除该目录。

解决方案:

  1. 设置固定的临时目录
# Windows (PowerShell)
$env:GOTMPDIR = "C:\go-build-temp"
# 或者永久设置系统环境变量 GOTMPDIR=C:\go-build-temp

# Linux/macOS
export GOTMPDIR="$HOME/go-build-temp"
  1. 创建目录并设置权限
// 可以在Go程序中确保目录存在
package main

import (
    "os"
    "path/filepath"
)

func init() {
    tmpDir := os.Getenv("GOTMPDIR")
    if tmpDir == "" {
        tmpDir = "C:\\go-build-temp" // 默认路径
    }
    os.MkdirAll(tmpDir, 0755)
}
  1. 验证设置生效
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))
}
  1. 对于持续集成或脚本
# 在构建脚本开头设置
#!/bin/bash
export GOTMPDIR="$HOME/.go-build"
mkdir -p "$GOTMPDIR"

# 然后执行构建
go build -o myapp .

设置GOTMPDIR后,所有go buildgo testgo run等命令的临时文件都会生成在指定目录中,而不是系统的临时目录。这样只需要在杀毒软件中排除这一个目录即可。

注意:确保指定的目录有足够的磁盘空间,因为Go编译过程中会生成大量临时文件。

回到顶部