-
宝慕林4294392
函数 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.htmlplayground example如果您组合的不仅仅是路径(例如方案或主机)或字符串多于路径(例如它包括查询字符串),则使用ResolveReference。
-
慕虎7371278
net/url 包中的 ResolveReference()接受的答案不适用于包含 .html 或 .img 等文件结尾的相对 url 路径。ResolveReference() 函数是 go 中加入 url 路径的正确方法。package mainimport ( "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))}
-
千万里不及你
一个简单的方法是修剪您不想要的 / 并加入。这是一个示例函数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)这消除了检查/返回错误的需要