英文:
net/url package: strip query from url
问题
我只是想确保我没有在net/url包中漏掉什么东西。有没有一种方法可以获取URL而不包含查询参数,而不使用strings包来删除它?
package main
import (
"fmt"
"net/url"
)
func main() {
u, _ := url.Parse("/url?foo=bar&foo=baz")
fmt.Printf("完整的URL: %#v\n", u.String())
fmt.Printf("查询参数: %#v", u.Query())
}
http://play.golang.org/p/injlx_ElAp
英文:
I just wanted to make sure I wasn't missing something on the net/url package. Is there a way to get the url without the query, without using using the strings package to strip it out?
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())
}
答案1
得分: 9
我不确定这是否是你要求的内容,但你可以使用u.Path
属性来获取URL的路径,或者使用URL指定的任何属性。
示例代码如下:
type URL struct {
Scheme string
Opaque string // 编码的不透明数据
User *Userinfo // 用户名和密码信息
Host string // 主机或主机:端口
Path string
RawQuery string // 编码的查询值,不包括'?'符号
Fragment string // 引用的片段,不包括'#'符号
}
// 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())
}
你可以在这里运行这段代码:http://play.golang.org/p/mijE73rUgw
英文:
I am not sure if this is what you are asking but you can use the u.Path
attribute to get the path of the url or any of the attributes specified by 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]
Example:
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())
}
答案2
得分: 7
是的。如果您需要获取不带查询部分(也不带片段/锚点)的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())
}
与仅使用u.Host + u.Path
或u.Path
相比,在这种情况下,您将保留URL的其余部分:协议、用户名和密码、主机。
https://play.golang.org/p/RY4vlfjj3_5
英文:
Yes. In case you need to get url without the query part (and without fragment/anchor) you can simply overwrite them, set to an empty string:
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
In comparison to using only u.Host + u.Path
or u.Path
in this case you will keep the rest of the url: protocol, username and password, host.
答案3
得分: 2
实际上你是可以的!URL类型是这样定义的:
type URL struct {
Scheme string
Opaque string // 编码的不透明数据
User *Userinfo // 用户名和密码信息
Host string // 主机或主机:端口
Path string
RawQuery string // 编码的查询值,不包括 '?'
Fragment string // 引用的片段,不包括 '#'
}
// scheme://[userinfo@]host/path[?query][#fragment]
所以你可以使用:
u, _ := url.Parse()
result := u.Host + u.Path
英文:
Actually you can! The URL type is defined this way:
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]
So you can use:
u, _ := url.Parse()
result := u.Host + u.Path
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论