将 URL 路径与 path.Join() 结合

在 Go 中有没有办法像使用文件路径一样组合 URL 路径path.Join()

当我使用时path.Join("http://foo", "bar"),我得到http:/foo/bar.

参见Golang Playground


达令说
浏览 327回答 3
3回答

宝慕林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)这消除了检查/返回错误的需要
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go