Combine URL paths with path.Join()

Issue

Is there a way in Go to combine URL paths similarly as we can do with filepaths using path.Join()?

For example see e.g. Combine absolute path and relative path to get a new absolute path.

When I use path.Join("http://foo", "bar"), I get http:/foo/bar.

See in Golang Playground.

Solution

The function path.Join expects a path, not a URL. Parse the URL to get a path and join with that path:

u, err := url.Parse("http://foo")
u.Path = path.Join(u.Path, "bar.html")
s := u.String() // prints http://foo/bar.html

playground example

If you are combining more than the path (scheme or host for example) or the string is more than the path (it includes a query string for example), then use ResolveReference.

Answered By – Bayta Darell

Answer Checked By – Senaida (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.