为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用golang提取基本url

如何使用golang提取基本url

Go
慕勒3428872 2022-12-19 10:53:45
给定一个 url 字符串,如何只检索基本 url(即 protocol://host:port)例如https://example.com/user/1000 => https://example.comhttps://localhost:8080/user/1000/profile => https://localhost:8080我试过解析 url,url.Parse()但net/url似乎没有返回基本 url 的方法。我可以尝试附加 url 的各个部分来获取基本 url,但我只是想检查是否有更好的替代方法。
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

我会使用url.Parse(), 解析它,并将结果中不需要的字段归零,即Path,RawQueryFragment。然后可以使用 获取结果(基本 URL)URL.String()

例如:

u, err := url.Parse("https://user@pass:localhost:8080/user/1000/profile?p=n#abc")

if err != nil {

    panic(err)

}

fmt.Println(u)

u.Path = ""

u.RawQuery = ""

u.Fragment = ""

fmt.Println(u)

fmt.Println(u.String())

这将输出(在Go Playground上尝试):


https://user@pass:localhost:8080/user/1000/profile?p=n#abc

https://user@pass:localhost:8080

https://user@pass:localhost:8080


查看完整回答
反对 回复 2022-12-19
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

你可以试试


u, _ := url.Parse("https://example.com/user/1000")

val := fmt.Sprintf("%s://%s", u.Scheme, u.Host)

在一般情况下,以下内容可能更有用。


rawURL := "https://user:pass@localhost:8080/user/1000/profile?p=n#abc"

u, _ := url.Parse(rawURL)

psw, pswSet := u.User.Password()

for _, d := range []struct {

    actual   any

    expected any

}{

    {u.Scheme, "https"},

    {u.User.Username(), "user"},

    {psw, "pass"},

    {pswSet, true},

    {u.Host, "localhost:8080"},

    {u.Path, "/user/1000/profile"},

    {u.Port(), "8080"},

    {u.RawPath, ""},

    {u.RawQuery, "p=n"},

    {u.Fragment, "abc"},

    {u.RawFragment, ""},

    {u.RequestURI(), "/user/1000/profile?p=n"},

    {u.String(), rawURL},

    {fmt.Sprintf("%s://%s", u.Scheme, u.Host), "https://localhost:8080"},

} {

    if d.actual != d.expected {

        t.Fatalf("%s\n%s\n", d.actual, d.expected)

    }

}


查看完整回答
反对 回复 2022-12-19
  • 2 回答
  • 0 关注
  • 256 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信