使用go run main.go时BitDefender误报Go编译文件为病毒,求解决方案
我是Go语言新手,正在学习相关教材。使用BitDefender杀毒软件时,它会间歇性将Go编译文件标记为病毒,提示信息如下:
"The file C:\Users\Marcus\AppData\Local\Temp\go-build591304050\b001\exe\e211.exe is infected with Gen:Variant.Tedy.601131. The threat has been successfully blocked, your device is safe"
问题出在Git Bash控制台执行go run main.go命令时。每次运行该命令Go都会在\AppData\Local\Temp下创建新目录,我不愿将整个Temp文件夹添加到杀毒软件排除列表,请问有什么解决办法?
我曾尝试设置Go环境变量GOBIN指向Temp下的"GOTMPDIR"目录,执行命令:
set GOBIN=C:\GOTMPDIR
但该操作并未修改Go环境变量,执行go env GOBIN时输出为空行。
1. 正确设置Go的临时编译目录(用GOTMPDIR而非GOBIN)
你之前混淆了两个环境变量的作用:
GOBIN是go install命令安装二进制文件的目标目录,和go run的临时编译流程无关GOTMPDIR才是Go存放临时编译文件的目录,修改它就能让Go把编译产物放到你指定的路径下
临时生效(当前Git Bash会话)
在Git Bash中执行:
export GOTMPDIR=C:/GOTMPDIR
(Git Bash中路径用斜杠/,或双反斜杠\\均可)
永久生效(所有Git Bash会话)
编辑Git Bash的配置文件~/.bashrc(无则新建),添加以下内容:
export GOTMPDIR=C:/GOTMPDIR
保存后重启Git Bash,执行go env GOTMPDIR验证是否生效。
2. 将自定义GOTMPDIR目录添加到BitDefender排除列表
现在Go的临时编译文件都会放到C:\GOTMPDIR下,只需把这个单一目录添加到BitDefender的排除列表即可——既解决误报问题,又不用开放整个Temp文件夹,保证安全性。
3. 向BitDefender提交误报反馈
从根源解决问题的话,可把被误报的e211.exe文件(若还能找到)上传到BitDefender的误报提交通道,说明这是Go语言编译的合法程序,请求官方更新病毒库,避免后续同类误报。
内容的提问来源于stack exchange,提问作者mikegami

