使用net / url内置包解析带有矩阵参数的URL

时间:2013-12-30 10:53:34

标签: url go httprequest url-parsing

URL似乎不支持matrix parameters

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

1 个答案:

答案 0 :(得分:0)

参数最终会被放入url.Path。这是一个可以将它们放在Query中的函数:

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
}