我想知道是否有一种非特定于操作系统的方法来测试 Go 程序是否通过使用命令go run或执行命令生成的二进制文件来启动go build。
第一:它总是被编译的。
第二:没有保证的方法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对于任何严肃的二进制文件来说都是不可接受的,它应该始终被编译。
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |