Go中是否有一种方法可以像使用文件路径一样组合URL路径path.Join()
?
例如,参见例如组合绝对路径和相对路径以获得新的绝对路径.
当我使用时path.Join("http://foo", "bar")
,我明白了http:/foo/bar
.
在Golang Playground看到.
函数path.Join期望一个路径,而不是URL.解析URL以获取路径并加入该路径:
u, err := url.Parse("http://foo") u.Path = path.Join(u.Path, "bar.html") s := u.String() // prints http://foo/bar.html
playground example
如果您组合的不仅仅是路径(例如方案或主机),或者字符串不仅仅是路径(例如,它包含查询字符串),那么请使用ResolveReference.
net/url包中的ResolveReference()
接受的答案不适用于包含.html或.img等文件结尾的相对URL路径.ResolveReference()函数是在go中连接url路径的正确方法.
package main import ( "fmt" "log" "net/url" ) func main() { u, err := url.Parse("../../..//search?q=dotnet") if err != nil { log.Fatal(err) } base, err := url.Parse("http://example.com/directory/") if err != nil { log.Fatal(err) } fmt.Println(base.ResolveReference(u)) }