开发和测试的时候需要加载配置文件,但是由于golang的配置文件用的是相对路径,main.go是在cmd下面的,这和二进制文件获得base dir是不同的,如何判断是go run main.go运行还是./main运行
开发和测试的时候需要加载配置文件,但是由于golang的配置文件用的是相对路径,main.go是在cmd下面的,这和二进制文件获得base dir是不同的,如何判断是go run main.go运行还是./main运行
无论是 go run main.go 还是 go build 之后的可执行文件,其实都是一样的。go run 会生成一个临时可执行文件用于运行,执行完成后会将这个临时文件删除。
简言之,两者的意义是一样的。也就不存在 go run 还是 go build 的二进制运行的判断方式。它们都是二进制方式运行。
配置文件一般都是放在一个固定的目录,或者是当前二进制文件所在目录。当然,最灵活的方式是通过命令行参数执行。
你可参考一篇文章,地址:https://eddycjy.com/posts/go/...。如想具体了解 go run main.go 的临时目录,参考我写的一篇文章:https://segmentfault.com/a/11...
以下方法可以简单地判断,程序是否是从go run(命令行或ide)里执行的,从而决定从工作目录还是go-bindata打包的Resource里读取配置、语言文件。
func IsRelease() bool {
arg1 := strings.ToLower(os.Args[0])
name := filepath.Base(arg1)
return strings.Index(name, constant.AppName) == 0 && strings.Index(arg1, "go-build") < 0
}
2 回答2.7k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
1 回答1.5k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.9k 阅读
linux下,二进制启动的ppid会等于sid。也查找父进程的启动参数可以看出。
关于gobuild和gorun启动的dir不同,可以在配置设置一个workdir,在启动的时候自动os.Chdir()切换到workdir去。