Функция filepath.EvalSymlinks

Функция filepath.EvalSymlinks из пакета path/filepath принимает путь к файлу или директории и возвращает канонический путь, в котором все символические ссылки (symlinks) разрешены в их конечные цели. Первым параметром функция принимает строку с путем, который необходимо обработать. Если путь содержит несколько символических ссылок, они будут разрешены рекурсивно.

Синтаксис

gofilepath.EvalSymlinks(path string) (string, error)

Функция возвращает строку с каноническим путем и ошибку, если путь не существует или возникла другая проблема. Если переданный путь не содержит символических ссылок, функция возвращает его очищенный вариант (через filepath.Clean).

Пример

Предположим, у нас есть директория /home/user/project и в ней символическая ссылка link_to_data, которая указывает на реальную директорию /var/data/storage. Разрешим эту ссылку:

gopackage main

import (
  "fmt"
  "path/filepath"
)

func main() {
  path := "/home/user/project/link_to_data"
  res, err := filepath.EvalSymlinks(path)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println(res)
}

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

go"/var/data/storage"

Пример

Попробуем разрешить путь, который не существует. В этом случае функция вернет ошибку:

gopackage main

import (
  "fmt"
  "path/filepath"
)

func main() {
  path := "/nonexistent/path"
  res, err := filepath.EvalSymlinks(path)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println(res)
}

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

go"Error: lstat /nonexistent/path: no such file or directory"

Пример

Если путь не содержит ссылок, функция вернет очищенный путь. Например, для пути с лишними разделителями и элементами ..:

gopackage main

import (
  "fmt"
  "path/filepath"
)

func main() {
  path := "/home/user/../user/project/./file.txt"
  res, err := filepath.EvalSymlinks(path)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println(res)
}

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

go"/home/user/project/file.txt"

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

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