Функция filepath.Rel

Функция filepath.Rel вычисляет относительный путь от базового каталога до указанного целевого пути. В первый параметр передается базовый путь (basepath), во второй параметр — целевой путь (targpath). Функция возвращает строку с относительным путем и ошибку, если путь не может быть вычислен.

Синтаксис

gofunc filepath.Rel(basepath, targpath string) (string, error)

Пример

Получим относительный путь от каталога /home/user/project к файлу /home/user/project/docs/readme.md:

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

Результат выполнения кода:

go"docs/readme.md"

Пример

Вычислим относительный путь из каталога /home/user в каталог /var/log:

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

Результат выполнения кода:

go"../../var/log"

Пример

Попробуем получить относительный путь, когда целевой путь не находится внутри базового каталога:

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

Результат выполнения кода:

go"../../../etc/config"

Пример

Обработаем случай, когда базовый путь является родительским каталогом для целевого пути:

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

Результат выполнения кода:

go".."

Смотрите также

  • функцию filepath.Abs,
    которая преобразует относительный путь в абсолютный
  • функцию filepath.Join,
    которая объединяет элементы пути с разделителем
  • функцию filepath.Clean,
    которая нормализует путь
  • функцию filepath.Split,
    которая разделяет путь на каталог и имя файла