Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用net/URL内置包使用矩阵参数解析URL_Url_Go_Httprequest_Url Parsing - Fatal编程技术网

使用net/URL内置包使用矩阵参数解析URL

使用net/URL内置包使用矩阵参数解析URL,url,go,httprequest,url-parsing,Url,Go,Httprequest,Url Parsing,似乎不支持 为什么? 如何从URL提取矩阵参数?什么时候应该使用它们而不是使用URL的request.URL.RawQuery部分中嵌入的请求参数? 参数最终被放入url.Path中。这里有一个函数可以将它们放入查询中: 从您链接的文档中:注意:相对矩阵URL通常不会实现,因此这只是一个理论讨论。我认为矩阵URL从未被宣布为标准,我也没有看到它们在一般使用中。为什么要去实现它们?@fuzzxl那么,没有人在使用它们?它们甚至都不是什么东西!您链接的文档是一个本可以实现的功能的想法,但它被删除了。

似乎不支持

为什么? 如何从URL提取矩阵参数?什么时候应该使用它们而不是使用URL的request.URL.RawQuery部分中嵌入的请求参数?
参数最终被放入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
}