Функция filepath.EvalSymlinks
Функция filepath.EvalSymlinks из пакета path/filepath
принимает путь к файлу или директории и возвращает канонический путь,
в котором все символические ссылки (symlinks) разрешены в их конечные
цели. Первым параметром функция принимает строку с путем,
который необходимо обработать. Если путь содержит несколько
символических ссылок, они будут разрешены рекурсивно.
Синтаксис
filepath.EvalSymlinks(path string) (string, error)
Функция возвращает строку с каноническим путем и ошибку,
если путь не существует или возникла другая проблема.
Если переданный путь не содержит символических ссылок,
функция возвращает его очищенный вариант (через filepath.Clean).
Пример
Предположим, у нас есть директория /home/user/project
и в ней символическая ссылка link_to_data, которая указывает
на реальную директорию /var/data/storage.
Разрешим эту ссылку:
package 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)
}
Результат выполнения кода:
"/var/data/storage"
Пример
Попробуем разрешить путь, который не существует. В этом случае функция вернет ошибку:
package 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)
}
Результат выполнения кода:
"Error: lstat /nonexistent/path: no such file or directory"
Пример
Если путь не содержит ссылок, функция вернет очищенный путь.
Например, для пути с лишними разделителями и элементами ..:
package 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)
}
Результат выполнения кода:
"/home/user/project/file.txt"
Смотрите также
-
функцию
filepath.Join,
которая объединяет элементы пути в один путь -
функцию
filepath.Abs,
которая возвращает абсолютный путь -
функцию
filepath.Clean,
которая очищает путь от лишних элементов -
функцию
os.Readlink,
которая возвращает цель одной символической ссылки