Путь к пакету
Обзор
Пакет 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 возвращает последний элемент пути. Конечные слэши удаляются перед извлечением последнего элемента. Если путь пустой, Base возвращает «.». Если путь состоит целиком из слэшей, Base возвращает «/».
Пример
Код:
fmt.Println(path.Base("/a/b"))
fmt.Println(path.Base("/"))
fmt.Println(path.Base(""))
Вывод:
b / .
func Clean
func Clean(path string) string
Clean возвращает кратчайшее имя пути, эквивалентное пути, путём чисто лексической обработки. Он применяет следующие правила итеративно до тех пор, пока дальнейшая обработка невозможна:
- Заменяет несколько слэшей одним слэшем.
- Устраняет каждый элемент имени пути «.» (текущий каталог).
- Устраняет каждый внутренний элемент имени пути «..» (родительский каталог) вместе с предшествующим ему элементом, который не является «..».
- Устраняет элементы «..», которые начинаются с корневого пути: то есть, заменяет «/..» на «/» в начале пути.
Возвращаемый путь заканчивается слэшем только в случае, если это корень «/».
Если результат этого процесса пустая строка, Clean возвращает строку «.».
См. также Роб Пайк, «Лексические имена файлов в 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",
"",
}
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("") = "."
func Dir
func Dir(path string) string
Dir возвращает всё, кроме последнего элемента пути, обычно каталога пути. После удаления конечного элемента с помощью Split, путь очищается, и конечные слэши удаляются. Если путь пустой, Dir возвращает «.». Если путь состоит целиком из слэшей, после которых идут байты, не являющиеся слэшами, 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 возвращает расширение имени файла, используемое путём. Расширение — это суффикс, начинающийся с последней точки в последнем элементе, разделённом слэшем пути; оно пустое, если точки нет.
Пример
Код:
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 объединяет любое количество элементов пути в один путь, разделяя их слэшами. Пустые элементы игнорируются. Результат очищается. Однако, если список аргументов пустой или все его элементы пустые, 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 сообщает, соответствует ли имя шаблону оболочки. Синтаксис шаблона:
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 требует, чтобы шаблон соответствовал всему имени, а не только подстроке. Единственная возможная возвращаемая ошибка — 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 разбивает путь сразу после последнего слэша, разделяя его на компоненты каталога и имени файла. Если в пути нет слэша, Split возвращает пустой каталог и файл, равный пути. Возвращаемые значения обладают свойством путь = каталог+имя_файла.
Пример
Код:
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/