Golang中如何获取应用程序的父目录
Golang中如何获取应用程序的父目录 我需要获取应用程序当前目录及其父目录,当前目录的获取并不困难,我按照以下方式实现:
wd,err := os.Getwd()
if err != nil {
panic(err)
}
fmt.Println(filepath.Dir(wd))
如何获取父目录?例如:
应用程序目录为: /home/ubuntu/sigasat-go/calampgateway
我需要获取: /home/ubuntu/sigasat-go
我已经在谷歌上搜索了很多次,但没有找到解决方案。感谢任何帮助。
我在项目中使用了这段代码:
path, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
这使我能够从任何位置执行我的程序。同时我使用 filepath.Join(path, filename) 来安全访问应用程序子文件夹中的其他文件。

补充说明:我认为使用相对路径不是个好主意。考虑到从crontab运行应用程序时绝对路径的重要性。
有内置的方法可以找到它。
你可以使用 os.Args[0] 来检查它是否是绝对路径、相对路径或仅仅是可执行文件的名称。如果是绝对路径,直接使用即可;如果是相对路径,则使用 filepath.Rel(os.Getwd(), os.Args[0]);如果只是名称,那么你需要搜索 PATH 环境变量中的所有条目,看是否存在从 os.Args[0] 获取到的名称对应的可执行文件。
但为什么你实际上需要这个路径呢?一个良好的可执行文件不应该关心它所在的位置。
使用 filepath.Rel()。
package main
import (
"fmt"
"path/filepath"
)
func main() {
base := "/home/user/project"
target := "/home/user/project/subdir/file.txt"
rel, err := filepath.Rel(base, target)
if err != nil {
panic(err)
}
fmt.Println(rel)
}
请注意,/ 目录没有父级目录,如果不事先检查会导致程序崩溃(如在线演示所示)。
附注:您所说的"应用程序目录"是指包含可执行文件的文件夹,还是当前所在的工作目录?
要获取应用程序的父目录,您可以使用filepath.Dir()函数对当前工作目录的结果再次调用。以下是示例代码:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
wd, err := os.Getwd()
if err != nil {
panic(err)
}
// 获取当前目录的父目录
parentDir := filepath.Dir(wd)
fmt.Println("父目录:", parentDir)
}
如果您的当前目录是/home/ubuntu/sigasat-go/calampgateway,运行此代码将输出:
父目录: /home/ubuntu/sigasat-go
filepath.Dir()函数会返回路径的目录部分,对于已经是目录的路径,它会返回其父目录。这就是为什么对当前工作目录调用一次filepath.Dir()就能得到父目录的原因。

