go相对路径

【go相对路径】Golang中存在各种运行方式,如何正确的引用文件路径成为一个值得商议的问题!

知识点:

1、Golang的相对路径是相对于执行命令时的目录
获取当前可执行文件所在的目录

import ( "path/filepath" "os" "os/exec" "string" )func GetAppPath() string { file, _ := exec.LookPath(os.Args[0]) path, _ := filepath.Abs(file) index := strings.LastIndex(path, string(os.PathSeparator))return path[:index] }

go run执行时输出一个临时目录,因为是将编译后的文件放到了一个临时目录,然后执行,这就是原因。
这样会导致一些问题:
1.依赖相对路径的文件,出现路径出错的问题
2.go run和go build不一样,一个到临时目录,一个可以在编译后的目录下执行,路径的处理方式不同
3.go run会不断的产生临时文件
解决方案:
1.将依赖的文件和可执行文件放在同一个目录下,这样在代码里面就可以使用依赖问价的相对路径,会主动在当前目下找到文件,但这种情况,不能支持go run的方式
2.通过参数传递指定路径,可以解决go run的问题
3.增加os.Getwd()进行多层判断,拿到的是执行编译命令所在的目录,并不是编译生成的可执行命令的位置
4.配置全局系统变量:设置项目工作区、利用系统自带变量($HOME)

    推荐阅读