使用net/URL内置包使用矩阵参数解析URL
似乎不支持 为什么? 如何从URL提取矩阵参数?什么时候应该使用它们而不是使用URL的request.URL.RawQuery部分中嵌入的请求参数?使用net/URL内置包使用矩阵参数解析URL,url,go,httprequest,url-parsing,Url,Go,Httprequest,Url Parsing,似乎不支持 为什么? 如何从URL提取矩阵参数?什么时候应该使用它们而不是使用URL的request.URL.RawQuery部分中嵌入的请求参数? 参数最终被放入url.Path中。这里有一个函数可以将它们放入查询中: 从您链接的文档中:注意:相对矩阵URL通常不会实现,因此这只是一个理论讨论。我认为矩阵URL从未被宣布为标准,我也没有看到它们在一般使用中。为什么要去实现它们?@fuzzxl那么,没有人在使用它们?它们甚至都不是什么东西!您链接的文档是一个本可以实现的功能的想法,但它被删除了。
参数最终被放入url.Path中。这里有一个函数可以将它们放入查询中:
从您链接的文档中:注意:相对矩阵URL通常不会实现,因此这只是一个理论讨论。我认为矩阵URL从未被宣布为标准,我也没有看到它们在一般使用中。为什么要去实现它们?@fuzzxl那么,没有人在使用它们?它们甚至都不是什么东西!您链接的文档是一个本可以实现的功能的想法,但它被删除了。@fuzzxl谢谢,也许我应该删除这个问题。不,没有必要这样做。它可以作为一个提醒,提醒其他人谁难倒在矩阵URI的。
// From net/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 '#'
}
func ParseWithMatrix(u string) (*url.URL, error) {
parsed, err := url.Parse(u)
if err != nil {
return nil, err
}
if strings.Contains(parsed.Path, ";") {
q := parsed.Path[strings.Index(parsed.Path, ";")+1:]
m, err := url.ParseQuery(q)
if err != nil {
return nil, err
}
for k, vs := range parsed.Query() {
for _, v := range vs {
m.Add(k, v)
}
}
parsed.Path = parsed.Path[:strings.Index(parsed.Path, ";")]
parsed.RawQuery = m.Encode()
}
return parsed, nil
}