-->

How can I resolve a relative path to absolute path

2020-08-17 05:37发布

问题:

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

回答1:

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



标签: go io path