猿问

如何使用golang提取基本url

给定一个 url 字符串,如何只检索基本 url(即 protocol://host:port)

例如

https://example.com/user/1000 => https://example.com

https://localhost:8080/user/1000/profile => https://localhost:8080

我试过解析 url,url.Parse()net/url似乎没有返回基本 url 的方法。我可以尝试附加 url 的各个部分来获取基本 url,但我只是想检查是否有更好的替代方法。


慕勒3428872
浏览 257回答 2
2回答

慕神8447489

我会使用url.Parse(), 解析它,并将结果中不需要的字段归零,即Path,RawQuery和Fragment。然后可以使用 获取结果(基本 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#abchttps://user@pass:localhost:8080https://user@pass:localhost:8080

芜湖不芜

你可以试试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)    }}
随时随地看视频慕课网APP

相关分类

Go
我要回答