Is there an API method like Node's path.resolve? Or something else that can achieve the same result?
For example, this NodeJS code:
path.resolve("~/sample.sh")
Should output:
/home/currentuser/sample.sh
Is there an API method like Node's path.resolve? Or something else that can achieve the same result?
For example, this NodeJS code:
path.resolve("~/sample.sh")
Should output:
/home/currentuser/sample.sh
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
Join doesn't have anything to do with the question that was asked, nor does Clean. It's not until the last 3 paragraphs or that the question is addressed.~, just resolving paths. But yes, they are not relevant anymore.
~/sample.shis an absolute path (what it refers to does not change based on CWD). The tilde is just a shortcut for the user's (absolute) home directory path.