Функция filepath.Rel
Функция filepath.Rel вычисляет относительный путь
от базового каталога до указанного целевого пути.
В первый параметр передается базовый путь (basepath),
во второй параметр — целевой путь (targpath).
Функция возвращает строку с относительным путем и ошибку,
если путь не может быть вычислен.
Синтаксис
func filepath.Rel(basepath, targpath string) (string, error)
Пример
Получим относительный путь от каталога /home/user/project
к файлу /home/user/project/docs/readme.md:
package main
import (
"fmt"
"path/filepath"
)
func main() {
base := "/home/user/project"
target := "/home/user/project/docs/readme.md"
rel, err := filepath.Rel(base, target)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(rel)
}
Результат выполнения кода:
"docs/readme.md"
Пример
Вычислим относительный путь из каталога /home/user
в каталог /var/log:
package main
import (
"fmt"
"path/filepath"
)
func main() {
base := "/home/user"
target := "/var/log"
rel, err := filepath.Rel(base, target)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(rel)
}
Результат выполнения кода:
"../../var/log"
Пример
Попробуем получить относительный путь, когда целевой путь не находится внутри базового каталога:
package main
import (
"fmt"
"path/filepath"
)
func main() {
base := "/home/user/project"
target := "/etc/config"
rel, err := filepath.Rel(base, target)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(rel)
}
Результат выполнения кода:
"../../../etc/config"
Пример
Обработаем случай, когда базовый путь является родительским каталогом для целевого пути:
package main
import (
"fmt"
"path/filepath"
)
func main() {
base := "/home/user/project/docs"
target := "/home/user/project"
rel, err := filepath.Rel(base, target)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(rel)
}
Результат выполнения кода:
".."
Смотрите также
-
функцию
filepath.Abs,
которая преобразует относительный путь в абсолютный -
функцию
filepath.Join,
которая объединяет элементы пути с разделителем -
функцию
filepath.Clean,
которая нормализует путь -
функцию
filepath.Split,
которая разделяет путь на каталог и имя файла