如何将方案和路径添加到url.URL

时间:2017-10-12 22:40:51

标签: url go

我试图通过以下方式更新已解析的网址:

u, _ := url.Parse(s)
if u.Scheme == "" {
    u.Scheme = "https"
}
if u.Path == "" {
    u.Path = "api"
}

但事实证明,如果初始字符串缺少URL方案(例如example.com),则该字符串被解析为URL.Path而不是URL.Host。请参阅此Go playground link

如何将此example.com转换为此https://example.com/api

2 个答案:

答案 0 :(得分:2)

您可以添加支票:

if !strings.HasPrefix(s, "http://") && !strings.HasPrefix(s, "https://") {
        s = "https://" + s
}

https://play.golang.org/p/dDK0nx-8x-

答案 1 :(得分:1)

Parse函数在RFC 3986 Section 3之外工作,它要求权限(主机和端口)在//之前。

  

URI = scheme“:”hier-part [“?”查询] [“#”片段]

     

hier-part =“//”权限路径 - abempty                    / path-absolute                    / path-rootless                    / path-empty

根据此规范,前导//是必需的,Parse函数强制执行该操作。传递给Parse函数的字符串可以包含空白URL方案,但它必须在主机名和端口之前包含//才能正确解析这些部分。您希望如何强制执行领先//取决于您。