我试图通过以下方式更新已解析的网址:
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
?
答案 0 :(得分:2)
您可以添加支票:
if !strings.HasPrefix(s, "http://") && !strings.HasPrefix(s, "https://") {
s = "https://" + s
}
答案 1 :(得分:1)
Parse函数在RFC 3986 Section 3之外工作,它要求权限(主机和端口)在//
之前。
URI = scheme“:”hier-part [“?”查询] [“#”片段]
hier-part =“//”权限路径 - abempty / path-absolute / path-rootless / path-empty
根据此规范,前导//
是必需的,Parse函数强制执行该操作。传递给Parse函数的字符串可以包含空白URL方案,但它必须在主机名和端口之前包含//
才能正确解析这些部分。您希望如何强制执行领先//
取决于您。