假设我们有以下文件夹结构:
|-- Repo
| |-- Data
| | |-- Sets
| | | |-- Set1.json
| |-- Tests
| |---|-- Case1
| |---|---|-- main.go
如果我想访问 Set1.json 文件,我该如何从 main.go 访问?假设我可以提供相对于存储库的相对路径,即将提供
Repo/Data/Sets
。有没有办法让我立即找出任何系统上涉及该相对路径的绝对路径?
我的解决方案是使用
os.Getwd
获取当前位置,然后使用:
tmp := filepath.Dir(filepath.Dir(currDir))
获取
main.go
所在文件夹父级的同级文件夹。然后我就这样做:
res := filepath.Join(tmp, "Data/Sets")
Or
res := filepath.Join(tmp, "Data\\Sets")
这将为我提供 Sets 文件夹的绝对路径。有没有更聪明的方法可以到达那里?它应该适用于任何系统。
可以使用os.Executable()代替os.Getwd(),它支持在任何地方执行二进制文件时获取正确的路径。