Spec-Zone.ru › Go

Путь к пакету

  • 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 возвращает последний элемент пути. Конечные слэши удаляются перед извлечением последнего элемента. Если путь пустой, 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 возвращает кратчайшее имя пути, эквивалентное пути, путём чисто лексической обработки. Он применяет следующие правила итеративно до тех пор, пока дальнейшая обработка невозможна:

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

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

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

Spec-Zone.ru

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