2019-10-11 15:19:29 +03:00

65 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Пакет `filepath` предоставляет функции для разбора и
// создания *путей к файлам* способом, который переносим
// между операционными системами; например, `dir/file` в
// Linux против `dir\file` в Windows.
package main
import (
"fmt"
"path/filepath"
"strings"
)
func main() {
// `Join` должен использоваться для создания путей в
// переносимом виде. Он принимает любое количество
// аргументов и строит из них иерархический путь.
p := filepath.Join("dir1", "dir2", "filename")
fmt.Println("p:", p)
// Вы должны всегда использовать `Join` вместо ручного
// объединения с помощью слешей `/` или `\`. В дополнение
// к обеспечению переносимости, `Join` также нормализует
// пути, удаляя лишние разделители.
fmt.Println(filepath.Join("dir1//", "filename"))
fmt.Println(filepath.Join("dir1/../dir1", "filename"))
// `Dir` и `Base` могут использоваться для разделения
// пути к каталогу и файлу. В качестве альтернативы,
// `Split` вернет оба в одном вызове.
fmt.Println("Dir(p):", filepath.Dir(p))
fmt.Println("Base(p):", filepath.Base(p))
// Можно проверить является ли путь абсолютным.
fmt.Println(filepath.IsAbs("dir/file"))
fmt.Println(filepath.IsAbs("/dir/file"))
filename := "config.json"
// Некоторые имена файлов имеют расширения, следующие
// за точкой. Мы можем получить расширение из таких
// имен с помощью `Ext`.
ext := filepath.Ext(filename)
fmt.Println(ext)
// Чтобы найти имя файла с удаленным расширением,
// используйте `strings.TrimSuffix`.
fmt.Println(strings.TrimSuffix(filename, ext))
// `Rel` находит относительный путь между двумя путями
// *base* и *target*. Возвращает ошибку, если *target*
// не может быть получен из *base*.
rel, err := filepath.Rel("a/b", "a/b/t/file")
if err != nil {
panic(err)
}
fmt.Println(rel)
rel, err = filepath.Rel("a/b", "a/c/t/file")
if err != nil {
panic(err)
}
fmt.Println(rel)
}