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

And*_*Cui 6 io path go

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

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

icz*_*cza 10

解析~(表示用户家)是一个不同的故事,通常它是解决这个问题的shell.有关详细信息,请参阅展开代字号到主目录.

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

原始答案如下.


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

例如:

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

输出:

/home/bob/work/go/src/github.com
Run Code Online (Sandbox Code Playgroud)

您可以使用path.Clean()filepath.Clean()"删除" 路径中的点.和双点...

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

例如:

fmt.Println(filepath.Abs("/home/bob/../alice"))
Run Code Online (Sandbox Code Playgroud)

输出:

/home/alice <nil>
Run Code Online (Sandbox Code Playgroud)

试试Go Playground上的例子.

请参阅相关问题:从相对路径解析绝​​对路径

  • 这似乎是一个红鲱鱼 - “加入”与提出的问题没有任何关系,“清洁”也没有。直到最后 3 段或问题才得到解决。 (2认同)