代码编译称为可执行文件后,我们可以在不同的文件目录下执行。例如,在windows下假如系统环境变量后,可以在任意目录下执行。但是,大部分程序往往需要加载配置文件,如果在代码中使用了相对路径的话,运行该执行文件时就会报错了。可执行文件默认以运行该程序的目录为工作目录。
例如,我们将可执行文件放在:
D:/User/go/src/github.com/kangbb/picture-mark
config.json
D:/User/go/src/github.com/kangbb/picture-mark/config
将该可执行文件路径加入环境变量后,利用命令行在如下目录运行:
C:/Users/User
此时会报错:
open /: Access is denied.
C:/Users/UserC:/Users/User/config
1. 获取可执行文件目录
具体代码如下:
func getExcPath() string {
file, _ := exec.LookPath(os.Args[0])
// 获取包含可执行文件名称的路径
path, _ := filepath.Abs(file)
// 获取可执行文件所在目录
index := strings.LastIndex(path, string(os.PathSeparator))
ret := path[:index]
return strings.Replace(ret, "\\", "/", -1)
}
2.获取执行可执行文件的目录
有时候,我们需要获取执行可执行文件的目录,可以使用如下代码:
func getCurrentDirectory() string {
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
return strings.Replace(dir, "\\", "/", -1)
}