我只是想确保我没有遗漏 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())
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是您要问的,但您可以使用该u.Path属性来获取 url 的路径或由 URL 指定的任何属性
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]
Run Code Online (Sandbox Code Playgroud)
例子:
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())
}
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/mijE73rUgw
是的。如果您需要在没有查询部分(并且没有片段/锚点)的情况下获取 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())
}
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/RY4vlfjj3_5
与仅使用u.Host + u.Path或u.Path在这种情况下相比,您将保留 url 的其余部分:协议、用户名和密码、主机。