如何在golang中解析绝对路径的相对路径?

时间:2017-11-13 10:06:42

标签: go io path

节点中是否存在类似'path.resolve'的api?或者某些事情可以做同样的事情?

例如(nodejs代码): path.resolve("~/sample.sh") 应该得到:/home/currentuser/sample.sh

1 个答案:

答案 0 :(得分:8)

解析~(表示用户家)是一个不同的故事,通常它是解决这个问题的shell。有关详细信息,请参阅Expand tilde to home directory

如果您想通过Go代码执行此操作,可以使用user.Current()功能获取有关当前用户的详细信息,包括其主文件夹User.HomeDir。但是,你仍然必须自己替换它。

原始答案如下。

您可以使用path.Join()filepath.Join()

例如:

base := "/home/bob"
fmt.Println(path.Join(base, "work/go", "src/github.com"))

输出:

/home/bob/work/go/src/github.com

您可以使用path.Clean()filepath.Clean()从您的路径中“移除”点.和双点..

您可以使用filepath.Abs()来解析相对路径并获得绝对路径(如果工作目录不是绝对的话,则在工作目录前加上)。 filepath.Abs()也会在结果上调用Clean()

例如:

fmt.Println(filepath.Abs("/home/bob/../alice"))

输出:

/home/alice <nil>

尝试Go Playground上的示例。

请参阅相关问题:Resolving absolute path from relative path

相关问题