golang中相对路径的问题

问题是这样的:

项目执行go install后,目录 /A/B中有main.exe和config.yml
读配置文件我用的相对路径ReadFile("./config.yml")
我在/A/B目录中执行main.exe是没有问题的
我在/A目录中执行B/main.exe就会出现“打开./config.yml错误”

如何解决?

阅读 18.9k
2 个回答

go里有相对路径好像是执行命令时的目录,不是相对可执行文件的

解决方法就是写一个获取当前 可执行文件位置的方法,

func getCurrentDirectory() string {
    dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
    if err != nil {
        log.Fatal(err)
    }
    return strings.Replace(dir, "\\", "/", -1)
}

PS:
更新:
楼中楼回复的链接调用的方法是:

func GetCurrentPath() string {
    s, err := exec.LookPath(os.Args[0])
    if err != nil {
        fmt.Println(err.Error())
    }
    s = strings.Replace(s, "\\", "/", -1)
    s = strings.Replace(s, "\\\\", "/", -1)
    i := strings.LastIndex(s, "/")
    path := string(s[0 : i+1])
    return path
}

你换这方法试试?

配置文件路径应该作为命令行参数可配置

如果是基于程序文件的相对目录, 参考做法:

execpath, err := os.Executable() // 获得程序路径
// handle err ...

configfile := filepath.Join(filepath.Dir(execpath), "./config.yml")
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题