3 回答
TA贡献2021条经验 获得超8个赞
函数 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。
TA贡献1802条经验 获得超4个赞
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))
}
TA贡献1784条经验 获得超9个赞
一个简单的方法是修剪您不想要的 / 并加入。这是一个示例函数
func JoinURL(base string, paths ...string) string {
p := path.Join(paths...)
return fmt.Sprintf("%s/%s", strings.TrimRight(base, "/"), strings.TrimLeft(p, "/"))
}
用法是
b := "http://my.domain.com/api/"
u := JoinURL(b, "/foo", "bar/", "baz")
fmt.Println(u)
这消除了检查/返回错误的需要
- 3 回答
- 0 关注
- 326 浏览
添加回答
举报