Existe-t-il un moyen dans Go de combiner les chemins d’URL de la même manière que nous pouvons le faire avec des chemins de fichiers en utilisant path.Join()
?
Par exemple, voir par exemple Combinez chemin absolu et chemin relatif pour obtenir un nouveau chemin absolu .
Quand j'utilise path.Join("http://foo", "bar")
, j'obtiens http:/foo/bar
.
Voir dans Aire de jeux Golang .
Pathункция path.Join ожидает путь, ainsi que l'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 .
ResolveReference () dans le package net/url
La réponse acceptée ne fonctionnera pas pour les chemins d’URL relatifs contenant des terminaisons de fichier comme .html ou .img. La fonction ResolveReference () est la bonne façon de joindre des chemins d’URL au rendez-vous.
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))
}
J'ai écrit cette fonction utilitaire qui fonctionne pour mes besoins:
func Join(basePath string, paths ...string) (*url.URL, error) {
u, err := url.Parse(basePath)
if err != nil {
return nil, fmt.Errorf("invalid url")
}
p2 := append([]string{u.Path}, paths...)
result := path.Join(p2...)
u.Path = result
return u, nil
}