什么是 .exe~ 扩展名?

What is a .exe~ extension?

我注意到 go build 现在正在创建一个 .exe 和一个 .exe~

我用谷歌搜索但一无所获,这只是在将其中一个集市库用作我正在使用的包的依赖项之后才开始发生。

我需要 .exe~ 吗?我可以删除它吗?

根据我使用 Go on Windows 的经验,go build 命令将创建一个 .exe~ 影子文件,因为:

  1. 您之前构建了运行时并创建了一个 .exe。
  2. 您已经 started/executed 二进制文件。
  3. 之前的执行 仍然是 运行 或者 windows 发生了其他一些愚蠢的文件锁定。
  4. 您再次尝试 go build,而之前的二进制文件仍在使用中。

幕后发生的事情是 go build 将在使用时将现有的已执行 .exe 重命名为 .exe~,并将新的二进制文件放在 .exe 以供下一次执行。

我一直对它如何处理正在使用的文件着迷,当 20 多年的所有其他 Windows 应用程序 returns 可怕的 "File In Use" 错误。

我最好的猜测是,当您执行 go 二进制文件时,执行不会在文件上放置文件锁。所以下一个构建可以简单地重命名正在使用的那个。

在我的测试 (2014) 中,新的 .exe 是最新版本,而 .exe~ 是之前的版本,即 运行。

我围绕这个做了很多测试,因为我的用例在重新编译时故意替换了现有的二进制文件。