如何添加方案和路径url.URL
问题描述:
我试图更新解析URL的方式如下:如何添加方案和路径url.URL
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
?
答
您可以添加一个检查:
if !strings.HasPrefix(s, "http://") && !strings.HasPrefix(s, "https://") {
s = "https://" + s
}
答
解析函数工作过的RFC 3986 Section 3这需要权威(主机和端口),以通过//
被preceeded。
URI = scheme“:”hier-part [“?”查询] [ “#” 片段]
票数部分= “//” 权威路径abempty /路径绝对 /无根路径 /路径空
根据该规范的导致//
是必需的,并且解析功能强制执行该操作。您传递给Parse函数的字符串可以包含空白URL方案,但它必须在主机名和端口之前包含//
才能正确解析这些部分。你想如何执行这个领先的//
取决于你。