我只是想确保我没有遗漏net / url包中的内容。有没有办法在没有查询的情况下获取url,而不使用strings包来删除它?
package main
import (
"fmt"
"net/url"
)
func main() {
u, _ := url.Parse("/url?foo=bar&foo=baz")
fmt.Printf("full uri: %#v\n", u.String())
fmt.Printf("query: %#v", u.Query())
}
答案 0 :(得分:4)
我不确定这是否是您要求的,但您可以使用u.Path
属性来获取网址的路径或网址指定的任何属性
type URL struct {
Scheme string
Opaque string // encoded opaque data
User *Userinfo // username and password information
Host string // host or host:port
Path string
RawQuery string // encoded query values, without '?'
Fragment string // fragment for references, without '#'
}
// scheme://[userinfo@]host/path[?query][#fragment]
示例:
package main
import (
"fmt"
"net/url"
)
func main() {
u, _ := url.Parse("http://www.test.com/url?foo=bar&foo=baz#this_is_fragment")
fmt.Println("full uri:", u.String())
fmt.Println("scheme:", u.Scheme)
fmt.Println("opaque:", u.Opaque)
fmt.Println("Host:", u.Host)
fmt.Println("Path", u.Path)
fmt.Println("Fragment", u.Fragment)
fmt.Println("RawQuery", u.RawQuery)
fmt.Printf("query: %#v", u.Query())
}
答案 1 :(得分:0)
其实你可以! URL type以这种方式定义:
type URL struct {
Scheme string
Opaque string // encoded opaque data
User *Userinfo // username and password information
Host string // host or host:port
Path string
RawQuery string // encoded query values, without '?'
Fragment string // fragment for references, without '#'
}
// scheme://[userinfo@]host/path[?query][#fragment]
所以你可以使用:
u, _ := url.Parse()
result := u.Host + u.Path
答案 2 :(得分:0)
是的。如果您需要获取没有查询部分(也没有片段/锚)的URL,则可以简单地覆盖它们,将其设置为空字符串:
package main
import (
"fmt"
"net/url"
)
func main() {
u, _ := url.Parse("/url?foo=bar&foo=baz")
fmt.Printf("full uri: %#v\n", u.String())
fmt.Printf("query: %#v", u.Query())
u.RawQuery = ""
u.Fragment = ""
fmt.Println("result url:", u.String())
}
https://play.golang.org/p/RY4vlfjj3_5
在这种情况下,与仅使用u.Host + u.Path
或u.Path
相比,您将保留其余的url:协议,用户名和密码,主机。