Spec-Zone.ru › Go

Пакет path

  • import "path"
  • Обзор
  • Указатель
  • Примеры
  • Подкаталоги

Обзор

Пакет path реализует вспомогательные функции для работы с путями, разделёнными косыми чертами.

Пакет path следует использовать только для путей, разделённых прямыми косыми чертами, например путей в URL. Этот пакет не работает с путями Windows, содержащими буквы дисков или обратные косые черты; для работы с путями операционной системы используйте пакет path/filepath.

Указатель

  • Переменные
  • func Base(path string) string
  • func Clean(path string) string
  • func Dir(path string) string
  • func Ext(path string) string
  • func IsAbs(path string) bool
  • func Join(elem ...string) string
  • func Match(pattern, name string) (matched bool, err error)
  • func Split(path string) (dir, file string)

Примеры

Base
Clean
Dir
Ext
IsAbs
Join
Match
Split

Файлы пакета

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, выполняя только лексическую обработку. Функция итеративно применяет следующие правила, пока дальнейшая обработка невозможна:

  1. Заменить несколько косых черт одной косой чертой.
  2. Удалить каждый элемент имени пути . (текущий каталог).
  3. Удалить каждый внутренний элемент имени пути .. (родительский каталог) вместе с предшествующим ему элементом, отличным от ...
  4. Удалить элементы .. в начале абсолютного пути: то есть заменить "/.." на "/" в начале пути.

Возвращаемый путь заканчивается косой чертой, только если это корень "/".

Если в результате обработки получается пустая строка, 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API