Парсинг 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
}