【问题标题】:How can I resolve a relative path to absolute path in golang?如何在golang中解析相对路径到绝对路径?
【发布时间】:2017-11-13 10:06:42
【问题描述】:

节点中是否有类似“path.resolve”的 api?或者有什么可以做同样的事情?

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

【问题讨论】:

  • 这在技术上与绝对值无关,它是波浪号扩展。 ~/sample.sh 是一个绝对路径(它所指的内容不会根据 CWD 而改变)。波浪号只是用户(绝对)主目录路径的快捷方式。

标签: go io path


【解决方案1】:

解决~(表示用户家)是另一回事,通常是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

【讨论】:

  • 这似乎是一个红鲱鱼 - Join 与所提出的问题没有任何关系,Clean 也没有。直到最后 3 段或问题得到解决。
  • @Adrian 问题的第一个版本没有提到解析~,只是解析路径。但是,是的,它们不再相关了。
  • 啊,很公平,没看到它被编辑过。
  • @Adrian 编辑了答案以使其显而易见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 2011-06-30
  • 1970-01-01
  • 2014-03-16
  • 2017-04-19
  • 2010-12-11
相关资源
最近更新 更多