Парсинг URL с матричными параметрами с использованием встроенного пакета net/url

Похоже, что URL не поддерживает параметры матрицы

// 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? и когда я должен использовать их вместо использования параметров запросов, встроенных в request.URL.RawQuery часть URL?

1 ответ

Параметры в конечном итоге попадают в 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
}
Другие вопросы по тегам