代码编译称为可执行文件后,我们可以在不同的文件目录下执行。例如,在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)
}