Во-первых, порядок параметров не должен иметь никакого значения.
Но я вижу ситуацию, когда это правило не применяется (например, когда вы хэшируете URL).В этом случае вам следует нормализовать URL-адрес перед его использованием.
Наконец, чтобы ответить на ваш вопрос, вы не можете сохранить порядок, если используете Query, так как Values - это карта, а карта не беспокоится о порядке.Таким образом, вы должны работать над запросом, используя u.RawQuery
.
u, err := url.Parse(originalURL)
if err != nil {
panic(err)
}
newQuery := ""
for i, queryPart := range strings.Split(u.RawQuery, ";") {
// you now have a slice of string ["private-token=foo", "authenticity_token=bar"]
splitParam := strings.Split(queryPart, "=")
if toMask(splitParam[0]) {
splitParam[1] = "FILTERED"
}
if i != 0 {
newQuery = newQuery + ";"
}
newQuery = splitParam[0] + "=" + splitParam[1]
}
u.RawQuery = newQuery
return u.String()
Этот код является просто примером.Вы должны лучше проверить на особые случаи или ошибки.Вы также можете использовать регулярные выражения, если хотите.