func GetWorkDir() string {
ex, err := os.Executable()
if err != nil {
panic(err)
}
dir := filepath.Dir(ex)
// Helpful when developing:
// when running `go run`, the executable is in a temporary directory.
if strings.Contains(dir, "go-build") {
return "."
}
return filepath.Dir(ex)
}
2条答案
按热度按时间aij0ehis1#
第一:总是编译。
第二:没有保证的方法来区分使用
go build
和go run
编译的二进制文件。go run main.go
只是构建一个临时二进制文件并执行它。您可以通过打印
os.Args[0]
(第一个参数)查看正在执行的二进制文件的路径。例如,对于以下程序:您可以尝试检测第一个文件在临时目录中的事实,但位置将取决于操作系统,并且不能保证在各个版本中保持相同。
总的来说,这可能是不值得的。
go run
是不可接受的任何严重的二进制,它应该总是被编译。j2cgzkjk2#
下面是我用来获取工作目录的函数,无论是使用
go run
运行还是构建它: