Golang Go语言路径问题

发布于 1周前 作者 wuwangju 来自 Go语言

go 新手遇到一个问题,初始化的时候需要加载一个配置文件,这个配置文件在 项目文件夹的 conf 文件下,运行 main.go 是没有问题的,但是如果我执行项目文件夹 task 文件下一个文件的单元测试,就会导致当前成程序的运行路径变为 task, 而 task 和 conf 是平级的当然也就没办法找到配置路径了。

  • 不希望在代码里面手写绝对路径
  • 尝试使用 os.Args[0] 以及 os.Executable() 去获取路径,但发觉执行单元测试的时候这个路径也不是项目路径,而是一个 APP/LOCAL 里面的一个路径
  • 最丑陋的方法是判断特定的字符串,然后再处理,但我不想这么做

请教各位大佬


Golang Go语言路径问题

更多关于Golang Go语言路径问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

16 回复

获取 绝对路径

更多关于Golang Go语言路径问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你这还是 python 的思路吧

golang 建议开始考虑放弃配置文件

如果是写类似 caddy 这样的本机服务,去学习一下它按照优先级读取本机各路径配置的方法。

但大部分时候都是写 web 服务吧。现在流行用环境变量配置或者用专门的配置管理服务做配置。
都是方便未来集群部署的。

docker 的最佳实践也是用环境变量配置。12factor 也是推荐环境变量的。

func GetCurrentPath() string {
, curPath, , _ := runtime.Caller(0)
return curPath
}

相当于 python 的__file

这样做应该是获取当前执行这个方法文件的路径 还是要把路径修改一下的

同一楼,也是写绝对路径解决的,获取项目的文件夹名再拼接的。

你们的意思通过 cur, _ = filepath.Abs(’.’) 去获取绝对路径 然后再去拼接?
这样执行 main.go 和 执行单元测试的路径是不一样的,就如我上面所说的,执行 mian.go 路径是项目路径,执行单元测试就变成 task 了

os.Getwd() 用这个函数获取当前的路径,判断里面有没有根目录的文件夹名字[缺点 不能有子文件夹和根目录字句一样]

当前路径获取两次可能不一样 我想有没有可能只获取项目的绝对路径

用命令行指定呢,而且测试和线上用一个配置文件不好吧。

同一个目录 ,获取多次是一样的吧,你在什么情况下有遇到获取两次不一样的情况。

上面有说过啊 直接执行根路径下的 main.go 以及 task 文件下一个文件的单元测试

这不是根目录和子目录么。。

dirName, _ := os.Getwd()
endIndex := strings.Index(dirName, “项目文件夹名”)
configPath := ""
if endIndex > 0 {
configPath = dirName[:endIndex] + “项目文件夹名 /”
}
toml.LoadFile(configPath + “./config.toml”)

是的,我在最开始就说过这个是最后的解决方案。。。。

嗯,貌似目前没有一次可以解决问题的方案。

我的做法是从 env 拿配置文件绝对路径,然后各种执行时带上 env 参数

在Go语言中,路径问题通常涉及模块导入路径、文件系统路径以及环境变量配置等方面。以下是一些常见的路径问题及其解决方案:

  1. 模块导入路径

    • 确保go.mod文件中声明的模块路径与实际仓库地址一致。
    • 使用相对路径导入同一模块下的包时,注意路径的正确性,避免使用绝对路径。
    • 第三方包应通过go get命令安装,并确保go.sum文件同步更新。
  2. 文件系统路径

    • 在Go中处理文件路径时,建议使用path/filepath包来处理不同操作系统的路径差异。
    • 避免硬编码路径,而应使用环境变量或配置文件来指定路径。
    • 使用os.Openos.Create等函数时,确保路径字符串正确,避免路径穿越等安全问题。
  3. 环境变量配置

    • GOPATHGOROOT是Go语言中的两个重要环境变量。GOROOT指向Go安装目录,GOPATH指向工作区目录。
    • 在Go 1.11及更高版本中,GOPATH不再是必需的,因为引入了模块支持。但在某些情况下,仍需正确配置GOPATH以确保工具链正常工作。
    • 确保环境变量在终端和IDE中均正确设置。

总之,处理Go语言中的路径问题时,需要仔细检查模块路径、文件系统路径以及环境变量的配置。通过合理使用Go语言的内置包和工具,可以有效避免和解决路径相关的错误。如有更具体的问题,请提供详细的错误信息以便进一步分析。

回到顶部