3 回答

TA貢獻(xiàn)2021條經(jīng)驗 獲得超8個贊
函數(shù) path.Join 需要一個路徑,而不是一個 URL。解析 URL 以獲取路徑并加入該路徑:
u, err := url.Parse("http://foo")
u.Path = path.Join(u.Path, "bar.html")
s := u.String() // prints http://foo/bar.html
playground example
如果您組合的不僅僅是路徑(例如方案或主機(jī))或字符串多于路徑(例如它包括查詢字符串),則使用ResolveReference。

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊
net/url 包中的 ResolveReference()
接受的答案不適用于包含 .html 或 .img 等文件結(jié)尾的相對 url 路徑。ResolveReference() 函數(shù)是 go 中加入 url 路徑的正確方法。
package main
import (
"fmt"
"log"
"net/url"
)
func main() {
u, err := url.Parse("../../..//search?q=dotnet")
if err != nil {
log.Fatal(err)
}
base, err := url.Parse("http://example.com/directory/")
if err != nil {
log.Fatal(err)
}
fmt.Println(base.ResolveReference(u))
}

TA貢獻(xiàn)1784條經(jīng)驗 獲得超9個贊
一個簡單的方法是修剪您不想要的 / 并加入。這是一個示例函數(shù)
func JoinURL(base string, paths ...string) string {
p := path.Join(paths...)
return fmt.Sprintf("%s/%s", strings.TrimRight(base, "/"), strings.TrimLeft(p, "/"))
}
用法是
b := "http://my.domain.com/api/"
u := JoinURL(b, "/foo", "bar/", "baz")
fmt.Println(u)
這消除了檢查/返回錯誤的需要
- 3 回答
- 0 關(guān)注
- 374 瀏覽
添加回答
舉報