在 Go 中替换 URL 中的协议和主机名

Chu*_*uck 1 string url substring url-rewriting go

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,以便参数列表和端点/路径完好无损,但协议从 更改为httphttps(除非它已经是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

是否有可靠/成熟的方法来处理这个问题(例如最好没有正则表达式)?

Fli*_*mzy 5

使用该url包:

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

或者

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