在Go中,包path
是你的朋友。
您可以從path.Dir()
的路徑中獲取目錄或文件夾,例如,
p := "/xyz/index.php"
dir := path.Dir(p)
fmt.Println("dir:", dir) // Output: "/xyz"
如果您發現與根路徑的鏈接(以斜槓開始),則可以按原樣使用該鏈接。
如果是相對的,您可以使用path.Join()
加上dir
。 Join()
也將「乾淨」的網址:
p2 := path.Join(dir, "index.php")
fmt.Println("p2:", p2)
p3 := path.Join(dir, "./index.php")
fmt.Println("p3:", p3)
p4 := path.Join(dir, "../index.php")
fmt.Println("p4:", p4)
輸出:
p2: /xyz/index.php
p3: /xyz/index.php
p4: /index.php
通過path.Join()
進行「清理」任務由path.Clean()
做,你可以手動當然任何路徑上調用。它們是:
- 用單斜槓替換多個斜線。
- 消除每個
.
路徑名稱元素(當前目錄)。
- 消除每個內部路徑名稱元素(父目錄)以及其之前的非
..
元素。
- 消除
..
開始根路徑的元素:即,在路徑開始處將"/.."
替換爲"/"
。
如果你有一個「完整」的網址(與架構,主機等),你可以使用url.Parse()
函數從該標記化URL爲你的原始URL字符串獲得url.URL
值,這樣你就可以得到這樣的路徑:
uraw := "http://example.com/xyz/index.php"
u, err := url.Parse(uraw)
if err != nil {
fmt.Println("Invalid url:", err)
}
fmt.Println("Path:", u.Path)
輸出:
Path: /xyz/index.php
嘗試在Go Playground所有例子。
並非像您所假設的那樣是一項任務。隨意從[這裏](https://github.com/cgray/geronimo/blob/master/src/Geronimo/UrlResolver.php)中汲取靈感。 – Orangepill
使用'(* URL).Parse'(請參閱http://golang.org/pkg/net/url/#URL.Parse),它正是你想要的(如果它們是實際的,語義上正確的,正確的鏈接沒有CMS習慣廢話)。 – Volker