当前位置:  开发笔记 > 编程语言 > 正文

将URL路径与path.Join()组合在一起

如何解决《将URL路径与path.Join()组合在一起》经验,为你挑选了2个好方法。

Go中是否有一种方法可以像使用文件路径一样组合URL路径path.Join()

例如,参见例如组合绝对路径和相对路径以获得新的绝对路径.

当我使用时path.Join("http://foo", "bar"),我明白了http:/foo/bar.

在Golang Playground看到.



1> Cerise Limón..:

函数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.


@ CodyA.Ray path软件包在所有平台上都使用正斜杠分隔的路径。在所有平台(包括Windows)上,“ path.Join(u.Path,“ bar.html”)”生成的路径均为“ /foo/bar.html”。路径套件[字面使用正斜线](https://github.com/golang/go/blob/9a0a150c9f50f920f35cc4d50ac3005503f44f2d/src/path/path.go#L158)。
@ CodyA.Ray该代码在Windows上可以正常工作。[path package](https://godoc.org/path)与正斜杠分隔的路径一起使用,如软件包文档第一段所述。[path / filepath](https://godoc.org/path/filepath)软件包在Windows上使用反斜杠,但这不是此答案中使用的软件包。

2> mmmkay..:

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))
}

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有