如何通过 go run 命令检查 Go 程序是否未运行?

dev*_*omp 2 go

我想知道是否有一种非特定于操作系统的方法来测试 Go 程序是否通过使用命令go run或执行命令生成的二进制文件来启动go build

Mar*_*arc 6

第一:它总是被编译的

第二:没有保证的方法go build可以区分使用和编译的二进制文件之间的区别go run

go run main.go只是构建一个临时二进制文件并执行它。

os.Args[0]您可以通过打印(第一个参数)查看正在执行的二进制文件的路径。例如对于以下程序:

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println(os.Args[0])
}
Run Code Online (Sandbox Code Playgroud)
$ go run main.go
/tmp/go-build854217312/b001/exe/main

$  go build -o main . && ./main
./main
Run Code Online (Sandbox Code Playgroud)

您可以尝试检测第一个目录位于临时目录中的事实,但该位置取决于操作系统,并且不保证在各个 go 版本中保持相同。

总的来说,可能不值得。go run对于任何严肃的二进制文件来说都是不可接受的,它应该始终被编译。