Пакет path
Обзор
Пакет path реализует вспомогательные функции для работы с путями, разделёнными косыми чертами.
Пакет path следует использовать только для путей, разделённых прямыми косыми чертами, например путей в URL. Этот пакет не работает с путями Windows, содержащими буквы дисков или обратные косые черты; для работы с путями операционной системы используйте пакет path/filepath.
Указатель
Файлы пакета
match.go path.go
Переменные
ErrBadPattern указывает на некорректный шаблон.
var ErrBadPattern = errors.New("syntax error in pattern") func Base
func Base(path string) string
Base возвращает последний элемент path. Перед извлечением последнего элемента завершающие косые черты удаляются. Если path пуст, Base возвращает ".". Если path состоит только из косых черт, Base возвращает "/".
Пример
Код:
fmt.Println(path.Base("/a/b"))
fmt.Println(path.Base("/"))
fmt.Println(path.Base(""))
Вывод:
b / .
func Clean
func Clean(path string) string
Clean возвращает кратчайшее имя пути, эквивалентное path, выполняя только лексическую обработку. Функция итеративно применяет следующие правила, пока дальнейшая обработка невозможна:
- Заменить несколько косых черт одной косой чертой.
- Удалить каждый элемент имени пути . (текущий каталог).
- Удалить каждый внутренний элемент имени пути .. (родительский каталог) вместе с предшествующим ему элементом, отличным от ...
- Удалить элементы .. в начале абсолютного пути: то есть заменить "/.." на "/" в начале пути.
Возвращаемый путь заканчивается косой чертой, только если это корень "/".
Если в результате обработки получается пустая строка, Clean возвращает строку ".".
См. также Rob Pike, «Лексические имена файлов в Plan 9, или Как правильно обрабатывать точку-точку», https://9p.io/sys/doc/lexnames.html
Пример
Код:
paths := []string{
"a/c",
"a//c",
"a/c/.",
"a/c/b/..",
"../a/c",
"../a/b/../././/c",
"/../a/c",
"/../a/b/../././/c",
"",
}
for _, p := range paths {
fmt.Printf("Clean(%q) = %q\n", p, path.Clean(p))
}
Вывод:
Clean("a/c") = "a/c"
Clean("a//c") = "a/c"
Clean("a/c/.") = "a/c"
Clean("a/c/b/..") = "a/c"
Clean("../a/c") = "../a/c"
Clean("../a/b/../././/c") = "../a/c"
Clean("/../a/c") = "/a/c"
Clean("/../a/b/../././/c") = "/a/c"
Clean("") = "."
func Dir
func Dir(path string) string
Dir возвращает все элементы path, кроме последнего, обычно — каталог пути. После удаления последнего элемента с помощью Split путь обрабатывается функцией Clean, а завершающие косые черты удаляются. Если path пуст, Dir возвращает ".". Если path состоит только из косых черт, за которыми следуют байты, отличные от косой черты, Dir возвращает одну косую черту. Во всех остальных случаях возвращаемый путь не заканчивается косой чертой.
Пример
Код:
fmt.Println(path.Dir("/a/b/c"))
fmt.Println(path.Dir("a/b/c"))
fmt.Println(path.Dir("/a/"))
fmt.Println(path.Dir("a/"))
fmt.Println(path.Dir("/"))
fmt.Println(path.Dir(""))
Вывод:
/a/b a/b /a a / .
func Ext
func Ext(path string) string
Ext возвращает расширение имени файла в path. Расширение — это суффикс, начинающийся с последней точки в последнем элементе path, разделённом косыми чертами; если точек нет, расширение пусто.
Пример
Код:
fmt.Println(path.Ext("/a/b/c/bar.css"))
fmt.Println(path.Ext("/"))
fmt.Println(path.Ext(""))
Вывод:
.css
func IsAbs
func IsAbs(path string) bool
IsAbs сообщает, является ли путь абсолютным.
Пример
Код:
fmt.Println(path.IsAbs("/dev/null"))
Вывод:
true
func Join
func Join(elem ...string) string
Join объединяет любое количество элементов пути в один путь, разделяя их косыми чертами. Пустые элементы игнорируются. Результат обрабатывается функцией Clean. Однако если список аргументов пуст или все его элементы пусты, Join возвращает пустую строку.
Пример
Код:
fmt.Println(path.Join("a", "b", "c"))
fmt.Println(path.Join("a", "b/c"))
fmt.Println(path.Join("a/b", "c"))
fmt.Println(path.Join("a/b", "../../../xyz"))
fmt.Println(path.Join("", ""))
fmt.Println(path.Join("a", ""))
fmt.Println(path.Join("", "a"))
Вывод:
a/b/c a/b/c a/b/c ../xyz a a
func Match
func Match(pattern, name string) (matched bool, err error)
Match сообщает, соответствует ли name шаблону командной оболочки. Синтаксис шаблона:
pattern:
{ term }
term:
'*' matches any sequence of non-/ characters
'?' matches any single non-/ character
'[' [ '^' ] { character-range } ']'
character class (must be non-empty)
c matches character c (c != '*', '?', '\\', '[')
'\\' c matches character c
character-range:
c matches character c (c != '\\', '-', ']')
'\\' c matches character c
lo '-' hi matches character c for lo <= c <= hi
Match требует, чтобы шаблону соответствовала вся строка name, а не только её подстрока. Единственная возможная возвращаемая ошибка — ErrBadPattern, если шаблон некорректен.
Пример
Код:
fmt.Println(path.Match("abc", "abc"))
fmt.Println(path.Match("a*", "abc"))
fmt.Println(path.Match("a*/b", "a/c/b"))
Вывод:
true <nil> true <nil> false <nil>
func Split
func Split(path string) (dir, file string)
Split разделяет path сразу после последней косой черты, выделяя каталог и имя файла. Если в path нет косой черты, Split возвращает пустой dir, а в file записывает path. Возвращаемые значения обладают свойством path = dir+file.
Пример
Код:
split := func(s string) {
dir, file := path.Split(s)
fmt.Printf("path.Split(%q) = dir: %q, file: %q\n", s, dir, file)
}
split("static/myfile.css")
split("myfile.css")
split("")
Вывод:
path.Split("static/myfile.css") = dir: "static/", file: "myfile.css"
path.Split("myfile.css") = dir: "", file: "myfile.css"
path.Split("") = dir: "", file: ""
Подкаталоги
| Название | Описание |
|---|---|
| .. | |
| filepath | Пакет filepath реализует вспомогательные функции для работы с путями к файлам в соответствии с правилами, определёнными целевой операционной системой. |
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/path/