登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-20 19:00:41 316浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《在 Go 中替换 URL 中的协议和主机名》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

Go 中是否有一种直接的方法来修改 URL/URI,而无需使用正则表达式来提取组件(即,我正在寻找一种确定性的“经过验证的”方式/方法)。

例如,我有两种类型的 URL 发送到我的应用程序:

  • http://wiley.coyote.acme.co/this/is/a/long/path?param1=123¶m2=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¶m2=456
  • https://egghead.local/another/long/path?meep=meep

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


解决方案


使用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
}

以上就是《在 Go 中替换 URL 中的协议和主机名》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>