Комбинируйте пути URL с путями.Присоединяйтесь()
Есть ли способ в Go комбинировать URL-пути аналогично тому, как мы можем это сделать с FilePath, используя path.Join()
?
Для примера см., например, объединить абсолютный путь и относительный путь, чтобы получить новый абсолютный путь.
Когда я использую path.Join("http://foo", "bar")
, я получаю http:/foo/bar
.
Смотрите в Golang Playground.
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.