亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 URL 路徑與 path.Join() 結合

將 URL 路徑與 path.Join() 結合

Go
達令說 2021-12-06 19:45:55
在 Go 中有沒有辦法像使用文件路徑一樣組合 URL 路徑path.Join()?當我使用時path.Join("http://foo", "bar"),我得到http:/foo/bar.參見Golang Playground。
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

函數 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


如果您組合的不僅僅是路徑(例如方案或主機)或字符串多于路徑(例如它包括查詢字符串),則使用ResolveReference。


查看完整回答
反對 回復 2021-12-06
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

net/url 包中的 ResolveReference()


接受的答案不適用于包含 .html 或 .img 等文件結尾的相對 url 路徑。ResolveReference() 函數是 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))

}


查看完整回答
反對 回復 2021-12-06
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

一個簡單的方法是修剪您不想要的 / 并加入。這是一個示例函數


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)

這消除了檢查/返回錯誤的需要


查看完整回答
反對 回復 2021-12-06
  • 3 回答
  • 0 關注
  • 375 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號