cli和双击go的二进制文件得到不同的路径
编辑于 2022-09-25 13:36:24 阅读 837
先看代码
func main() {
root, err0 := os.Getwd()
if err0 != nil {
println("empty")
}
println("dir: " + root)
}
生成可执行文件
cuiwei@weideMacBook-Pro demo % go build -o app2 .
cli的方式执行
cuiwei@weideMacBook-Pro demo % ./app2
dir: /Users/cuiwei/GolandProjects/demo
双击 app2 的方式
Last login: Fri Sep 9 12:44:47 on ttys001
/Users/cuiwei/GolandProjects/demo/app2 ; exit;
cuiwei@weideMacBook-Pro ~ % /Users/cuiwei/GolandProjects/demo/app2 ; exit;
dir: /Users/cuiwei
总结
所以,依赖os.Getwd()
做文件上传的,需要注意一下
更好的办法
func main() {
ePath, err := os.Executable()
if err != nil {
panic(err)
}
// 全路径
fmt.Println(ePath)
// 所在目录
fmt.Println("file directory", path.Dir(ePath))
}
os.Executable()
获取的是可执行文件的绝对路径。需要注意的是:如果执行go run main.go
得到的是一个临时的路径
cuiwei@weideMacBook-Pro demo % go run main.go
/var/folders/0r/9vy7796d43v3tmp2fwwfqgpw0000gn/T/go-build1779961896/b001/exe/main
file directory /var/folders/0r/9vy7796d43v3tmp2fwwfqgpw0000gn/T/go-build1779961896/b001/exe