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