Go 如何检查程序是否已编译?

Go 如何检查程序是否已编译?,go,Go,我正在寻找一种方法来测试用golang编写的程序是否作为二进制文件执行: go build main.go然后/program\u name 或者直接从源代码中获取,而无需编译: go运行main.go 如何在不同的操作系统中测试这一点?有一个一刀切的答案吗?首先:它总是编译的 第二:没有保证的方法来区分使用go-build和go-run编译的二进制文件之间的区别 只需构建一个临时二进制文件并执行它 您可以通过打印os.Args[0](第一个参数)查看正在执行的二进制文件的路径。例如,对于以下程

我正在寻找一种方法来测试用golang编写的程序是否作为二进制文件执行:
go build main.go
然后
/program\u name


或者直接从源代码中获取,而无需编译:
go运行main.go


如何在不同的操作系统中测试这一点?有一个一刀切的答案吗?

首先:它总是编译的

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

只需构建一个临时二进制文件并执行它

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

主程序包
进口(
“fmt”
“操作系统”
)
func main(){
fmt.Println(os.Args[0])
}
您可以尝试检测第一个目录位于临时目录中的事实,但是位置将取决于操作系统,并且不能保证在go版本中保持不变


总的来说,这可能不值得<代码>开始运行对于任何严重的二进制文件都是不可接受的,应该始终编译它。

“或者直接从源代码不编译”这是无法做到的<代码>开始运行编译程序。
$ go run main.go
/tmp/go-build854217312/b001/exe/main

$  go build -o main . && ./main
./main