如何添加方案和路径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 
} 

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

解析函数工作过的RFC 3986 Section 3这需要权威(主机和端口),以通过//被preceeded。

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

票数部分= “//” 权威路径abempty /路径绝对 /无根路径 /路径空

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