Есть ли в Go простой способ изменить URL / URI без использования регулярного выражения для извлечения компонентов (т.е. я ищу детерминированный «проверенный и верный» способ / подход).

Например, у меня есть два типа URL-адресов, которые отправляются моему приложению:

  • http://wiley.coyote.acme.co/this/is/a/long/path?param1=123&param2=456
  • https://road.runner.acme.co/another/long/path?meep=meep

Что мне нужно сделать, так это переписать URL-адреса, чтобы список параметров и конечная точка / путь не были повреждены, но протокол был изменен с http на https (если он еще не https), и все имя хоста / FQDN необходимо изменить на egghead.local. Так, например, два приведенных выше URL-адреса будут выглядеть так:

  • https://egghead.local/this/is/a/long/path?param1=123&param2=456
  • https://egghead.local/another/long/path?meep=meep

Есть ли надежный / зрелый подход к этому (например, желательно без регулярного выражения)?

-1
Chuck 31 Июл 2020 в 21:49

1 ответ

Лучший ответ

Используйте пакет url:

func toHTTPS(addr string) (string, error) {
    u, err := url.Parse(addr)
    if err != nil {
        return "", err
    }
    u.Scheme = "https"
    return u.String(), nil
}

Или

func setHostname(addr, hostname string) (string, error) {
    u, err := url.Parse(addr)
    if err != nil {
        return err
    }
    u.Host = hostname
    return u.String(), nil

}
3
Flimzy 31 Июл 2020 в 18:53