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

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

问题描述:

Is there a api like 'path.resolve' in node? Or something can do the same?

For Example (nodejs code): path.resolve("~/sample.sh") Should got: /home/currentuser/sample.sh

节点中是否有类似“ path.resolve”的api? 还是可以做些同样的事情? p>

例如(nodejs代码): path.resolve(“〜/ sample.sh”) code> 应该得到: /home/currentuser/sample.sh code> p> div>

Resolving ~ (denoting the user home) is a different story, and usually it's the shell that resolves this. For details see Expand tilde to home directory.

If you want to do it from Go code, you may use the user.Current() function to get details about the current user, including its home folder which will be User.HomeDir. But still, you'll have to handle replacing this yourself.

Original answer follows.


You may use path.Join() or filepath.Join().

For example:

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

Output:

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

You may use path.Clean() and filepath.Clean() to "remove" dots . and double dots .. from your path.

You may use filepath.Abs() to resolve relative paths and get an absolute (prepending the working directory if it's not absolute). filepath.Abs() also calls Clean() on the result.

For example:

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

Outputs:

/home/alice <nil>

Try the examples on the Go Playground.

See related question: Resolving absolute path from relative path