Câu hỏi Kết hợp đường dẫn URL với path.Join ()


Có cách nào trong Go để kết hợp các đường dẫn URL tương tự như chúng ta có thể thực hiện với các tệp bằng cách sử dụng path.Join()?

Ví dụ: xem ví dụ Kết hợp đường dẫn tuyệt đối và đường dẫn tương đối để có được một đường dẫn tuyệt đối mới.

Khi tôi sử dụng path.Join("http://foo", "bar"), Tôi có http:/foo/bar.

Nhìn vào Sân chơi Golang.


18
2018-01-08 01:16


gốc




Các câu trả lời:


ResolveReference () trong gói net / url

Câu trả lời được chấp nhận sẽ không hoạt động đối với các đường dẫn url tương đối có chứa đuôi tệp như .html hoặc .img. Hàm ResolveReference () là cách chính xác để nối các đường dẫn url trong khi đi.

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))
}

17
2018-04-14 17:05





Đường dẫn hàm.Join dự kiến ​​đường dẫn chứ không phải URL. Phân tích cú pháp URL để nhận đường dẫn và tham gia với đường dẫn đó:

u, err := url.Parse("http://foo")
u.Path = path.Join(u.Path, "bar.html")
s := u.String() // prints http://foo/bar.html

sân chơi ví dụ

Nếu bạn đang kết hợp nhiều hơn đường dẫn (lược đồ hoặc máy chủ ví dụ) hoặc chuỗi là nhiều hơn đường dẫn (nó bao gồm một chuỗi truy vấn ví dụ), sau đó sử dụng ResolveReference.


32
2018-01-08 01:33



Câu trả lời này giải thích chính xác các sắc thái giữa u.String() và ResolveReference - Dan Esparza