在运行一个编译成.exe的 Go程序时,如果在import处插入换行,就会出现错误

编程语言 2026-07-09

我在运行我用一个简单Go脚本写的可执行文件时遇到了一个奇怪的错误,当我尝试运行该.exe时,会出现下面的错误并把它删掉:

在此输入图片描述
翻译:Windows无法访问指定的设备、路径或文件。您可能没有访问该项的权限。

代码如下:

package main

import (
    "fmt"

    "fwUpgraderDCL/internal/app"
)

func main() {
    fmt.Println("===== Firmware upgrade process =====")

    app.Init()

    fmt.Println("Press ENTER to exit...")
    fmt.Scanln()
}

我发现把 "fmt" 和 "fwUpgraderDCL/..." 之间的换行去掉可以解决这个问题,但我还不太明白为什么……

package main

import (
    "fmt"
    "fwUpgraderDCL/internal/app"
)

func main() {
    fmt.Println("===== Firmware upgrade process =====")

    app.Init()

    fmt.Println("Press ENTER to exit...")
    fmt.Scanln()
}

由于脚本仍处于早期阶段且很小,我可以把整个项目分享给你。在tools里你会发现一些用于构建.exe并用go运行的脚本。如果你运行构建并执行.exe,当存在该换行时它会像我遇到的那样失败;如果你运行run_go.cmd,它在两种情况下都应该能够正常运行……
https://www.mediafire.com/file/3so5i3zbtau40pb/v1.zip/file

解决方案

很可能,当你执行 go run run_go.cmd 时,Go会把你的程序编译到一个隐藏的嵌套临时目录 AppData\Local\Temp,并动态执行它,因此 Windows Defender 会对临时编译缓存的执行采用与本地项目文件夹中重新生成的 .exe 不同的启发式规则来评估。并且,微小的差异会改变 .exe 的最终哈希值和文件结构——在一种布局中,它无意中匹配了一个已知的恶意签名启发式规则——在另一种布局中则不是。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章