Комбинируйте пути URL с путями.Присоединяйтесь()


Есть ли способ в Go комбинировать URL-пути аналогично тому, как мы можем это сделать с FilePath, используя path.Join()?

Для примера см., например, объединить абсолютный путь и относительный путь, чтобы получить новый абсолютный путь.

Когда я использую path.Join("http://foo", "bar"), я получаю http:/foo/bar.

Смотрите в Golang Playground.

2 18

2 ответа:

ResolveReference () в пакете net / url

Принятый ответ не будет работать для относительных url-путей, содержащих концовки файлов, такие как .html или .НВФ. В ResolveReference (функция) - это правильный путь, чтобы присоединиться к URL-пути в Go.

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

Путь к функции.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

пример детской площадки

Если вы объединяете больше, чем путь (например, схема или хост), или строка больше, чем путь (например, она включает строку запроса), то используйте ResolveReference.