2017-10-12 44 views
0

我試圖更新解析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

回答

1

解析函數工作過的RFC 3986 Section 3這需要權威(主機和端口),以通過//被preceeded。

URI = scheme「:」hier-part [「?」查詢] [ 「#」 片段]

票數部分= 「//」 權威路徑abempty /路徑絕對 /無根路徑 /路徑空

根據該規範的導致//是必需的,並且解析功能強制執行該操作。您傳遞給Parse函數的字符串可以包含空白URL方案,但它必須在主機名和端口之前包含//才能正確解析這些部分。你想如何執行這個領先的//取決於你。