1 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
事實(shí)證明,這個(gè)path/filepath
包可以為你做這件事。如果您忽略這些是 URL 的事實(shí),而是將它們視為路徑,您可以使用filepath.Rel()
:
package main
import (
? ? "fmt"
? ? "path/filepath"
)
func main() {
? ? base := "www.my.com/your/stuff"
? ? target := "www.my.com/your/stuff/123/4"
? ? rel, _ := filepath.Rel(base, target)
? ? fmt.Println(rel) // prints "123/4"
}
如果您想將這些路徑視為實(shí)際 URL,您可能應(yīng)該使用該net/url
包首先將路徑解析為 URL,然后提取路徑并filepath.Rel()
在其上使用。這使您可以正確處理 URL 字符串中的查詢之類的問題,這些問題會(huì)出錯(cuò)filepath
,如下所示:
package main
import (
? ? "fmt"
? ? "path/filepath"
? ? "net/url"
)
func main() {
? ? url1, _ := url.Parse("http://www.my.com/your/stuff")
? ? url2, _ := url.Parse("http://www.my.com/your/stuff/123/4?query=test")
? ? base := url1.Path
? ? target := url2.Path
? ? rel, _ := filepath.Rel(base, target)
? ? fmt.Println(base)? ?// "/your/stuff"
? ? fmt.Println(target) // "/your/stuff/123/4"
? ? fmt.Println(rel)? ? // "123/4"
}
作為獎(jiǎng)勵(lì),filepath.Rel()
它也足夠聰明來處理另一個(gè)方向的相對路徑:
rel,?_?=?filepath.Rel(target,?base)?//?rel?is?now?"../.."
- 1 回答
- 0 關(guān)注
- 126 瀏覽
添加回答
舉報(bào)