Documentation ¶
Index ¶
- type Path
- func (path Path) Abs() (Path, error)
- func (path Path) Base() Path
- func (path Path) Chdir() error
- func (path Path) Chmod(mode os.FileMode) error
- func (path Path) Chown(uid, gid int) error
- func (path Path) Chtimes(atime time.Time, mtime time.Time) error
- func (path Path) Clean() Path
- func (path Path) Create() (*os.File, error)
- func (path Path) CreateTemp(pattern string) (*os.File, error)
- func (path Path) Dir() Path
- func (path Path) DirFS() fs.FS
- func (path Path) EvalSymlinks() (Path, error)
- func (path Path) Ext() string
- func (path Path) FromSlash() Path
- func (path Path) Glob(pattern string) (matches []Path, err error)
- func (path Path) IsAbs() bool
- func (path Path) Join(elem ...Path) Path
- func (path Path) Lchown(uid, gid int) error
- func (path Path) Link(newname Path) error
- func (path Path) Lstat() (os.FileInfo, error)
- func (path Path) Match(pattern string) (bool, error)
- func (path Path) Mkdir(perm os.FileMode) error
- func (path Path) MkdirAll(perm os.FileMode) error
- func (path Path) MkdirTemp(pattern string) (Path, error)
- func (path Path) Open() (*os.File, error)
- func (path Path) OpenFile(flag int, perm os.FileMode) (*os.File, error)
- func (path Path) ReadDirFS(fsys fs.FS) ([]fs.DirEntry, error)
- func (path Path) Readlink() (Path, error)
- func (path Path) Rel(targpath Path) (Path, error)
- func (path Path) Remove() error
- func (path Path) RemoveAll() error
- func (path Path) Rename(newpath Path) error
- func (path Path) Split() (dir, file Path)
- func (path Path) Stat() (os.FileInfo, error)
- func (path Path) Sub(fsys fs.FS) (fs.FS, error)
- func (path Path) Symlink(newname Path) error
- func (path Path) ToSlash() Path
- func (path Path) Truncate(size int64) error
- func (path Path) ValidPath() bool
- func (path Path) VolumeName() Path
- func (path Path) Walk(fn WalkFunc) error
- func (path Path) WalkDir(fn WalkDirFunc) error
- func (path Path) WriteFile(data []byte, perm os.FileMode) error
- type WalkDirFunc
- type WalkFunc
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Path ¶
type Path string
Path is a custom type representing a path that is implemented by wrapping the standard library.
func Executable ¶
Executable returns the path name for the executable that started the current process. There is no guarantee that the path is still pointing to the correct executable. If a symlink was used to start the process, depending on the operating system, the result might be the symlink or the path it pointed to. If a stable result is needed, path/filepath.EvalSymlinks might help.
Executable returns an absolute path unless an error occurred.
The main use case is finding resources located relative to an executable.
func Getwd ¶
Getwd returns a rooted path name corresponding to the current directory. If the current directory can be reached via multiple paths (due to symbolic links), Getwd may return any one of them.
func SplitList ¶
SplitList splits a list of paths joined by the OS-specific ListSeparator, usually found in PATH or GOPATH environment variables. Unlike strings.Split, SplitList returns an empty slice when passed an empty string.
Example ¶
package main import ( "fmt" pt "github.com/jonchun/pathtype" ) func main() { fmt.Println("On Unix:", pt.SplitList("/a/b/c:/usr/bin")) }
Output: On Unix: [/a/b/c /usr/bin]
func TempDir ¶
func TempDir() Path
TempDir returns the default directory to use for temporary files.
func UserCacheDir ¶
UserCacheDir returns the default root directory to use for user-specific cached data. Users should create their own application-specific subdirectory within this one and use that.
func UserConfigDir ¶
UserConfigDir returns the default root directory to use for user-specific configuration data. Users should create their own application-specific subdirectory within this one and use that.
func UserHomeDir ¶
UserHomeDir returns the current user's home directory.
func (Path) Abs ¶
Abs returns an absolute representation of path. If the path is not absolute it will be joined with the current working directory to turn it into an absolute path. The absolute path name for a given file is not guaranteed to be unique. Abs calls Clean on the result.
func (Path) Base ¶
Base returns the last element of path. Trailing path separators are removed before extracting the last element. If the path is empty, Base returns ".". If the path consists entirely of separators, Base returns a single separator.
Example ¶
package main import ( "fmt" pt "github.com/jonchun/pathtype" ) func main() { type path = pt.Path fmt.Println("On Unix:") fmt.Println(path("/foo/bar/baz.js").Base()) fmt.Println(path("/foo/bar/baz").Base()) fmt.Println(path("/foo/bar/baz/").Base()) fmt.Println(path("dev.txt").Base()) fmt.Println(path("../todo.txt").Base()) fmt.Println(path("..").Base()) fmt.Println(path(".").Base()) fmt.Println(path("/").Base()) fmt.Println(path("").Base()) }
Output: On Unix: baz.js baz baz dev.txt todo.txt .. . / .
func (Path) Chdir ¶
Chdir changes the current working directory to the directory at path. If there is an error, it will be of type *os.PathError.
func (Path) Chmod ¶
Chmod changes the mode of the file at path to mode. If there is an error, it will be of type *os.PathError.
func (Path) Chown ¶
Chown changes the numeric uid and gid of the file at path. If there is an error, it will be of type *os.PathError. On Windows, it always returns the syscall.EWINDOWS error, wrapped in *os.PathError.
func (Path) Chtimes ¶
Chtimes changes the access and modification times of the file at path. If there is an error, it will be of type *os.PathError.
func (Path) Clean ¶
Clean returns the shortest path name equivalent to path by purely lexical processing. It applies the following rules iteratively until no further processing can be done:
- Replace multiple Separator elements with a single one.
- Eliminate each . path name element (the current directory).
- Eliminate each inner .. path name element (the parent directory) along with the non-.. element that precedes it.
- Eliminate .. elements that begin a rooted path: that is, replace "/.." by "/" at the beginning of a path, assuming Separator is '/'.
The returned path ends in a slash only if it represents a root directory, such as "/" on Unix or `C:\` on Windows.
Finally, any occurrences of slash are replaced by Separator.
If the result of this process is an empty string, Clean returns the string ".".
See also Rob Pike, “Lexical File Names in Plan 9 or Getting Dot-Dot Right,” https://9p.io/sys/doc/lexnames.html
func (Path) Create ¶
Create creates or truncates the file at path. If the file already exists, it is truncated. If the file does not exist, it is created with mode 0666 (before umask). If successful, methods on the returned File can be used for I/O; the associated file descriptor has mode os.O_RDWR. If there is an error, it will be of type *os.PathError.
func (Path) CreateTemp ¶
CreateTemp creates a new temporary file in the directory at path, opens the file for reading and writing, and returns the resulting file. The filename is generated by taking pattern and adding a random string to the end. If pattern includes a "*", the random string replaces the last "*". If the path is empty, CreateTemp uses the default directory for temporary files, as returned by TempDir. Multiple programs or goroutines calling CreateTemp simultaneously will not choose the same file. The caller can use the file's Name method to find the pathname of the file. It is the caller's responsibility to remove the file when it is no longer needed.
func (Path) Dir ¶
Dir returns all but the last element of path, typically the path's directory. After dropping the final element, Dir calls Clean on the path and trailing slashes are removed. If the path is empty, Dir returns ".". If the path consists entirely of separators, Dir returns a single separator. The returned path does not end in a separator unless it is the root directory.
Example ¶
package main import ( "fmt" pt "github.com/jonchun/pathtype" ) func main() { type path = pt.Path fmt.Println("On Unix:") fmt.Println(path("/foo/bar/baz.js").Dir()) fmt.Println(path("/foo/bar/baz").Dir()) fmt.Println(path("/foo/bar/baz/").Dir()) fmt.Println(path("/dirty//path///").Dir()) fmt.Println(path("dev.txt").Dir()) fmt.Println(path("../todo.txt").Dir()) fmt.Println(path("..").Dir()) fmt.Println(path(".").Dir()) fmt.Println(path("/").Dir()) fmt.Println(path("").Dir()) }
Output: On Unix: /foo/bar /foo/bar /foo/bar/baz /dirty/path . .. . . / .
func (Path) DirFS ¶
DirFS returns a file system (an fs.FS) for the tree of files rooted at the directory at path.
func (Path) EvalSymlinks ¶
EvalSymlinks returns path's name after the evaluation of any symbolic links. If path is relative the result will be relative to the current directory, unless one of the components is an absolute symbolic link. EvalSymlinks calls Clean on the result.
func (Path) Ext ¶
Ext returns the file name extension used by path. The extension is the suffix beginning at the final dot in the final element of path; it is empty if there is no dot.
Example ¶
package main import ( "fmt" pt "github.com/jonchun/pathtype" ) func main() { type path = pt.Path fmt.Printf("No dots: %q\n", path("index").Ext()) fmt.Printf("One dot: %q\n", path("index.js").Ext()) fmt.Printf("Two dots: %q\n", path("main.test.js").Ext()) }
Output: No dots: "" One dot: ".js" Two dots: ".js"
func (Path) FromSlash ¶
FromSlash returns the result of replacing each slash ('/') character in path with a separator character. Multiple slashes are replaced by multiple separators.
func (Path) Glob ¶
Glob returns the names of all files matching path.Join(pattern) or nil if there is no matching file. The syntax of patterns is the same as in Match. The pattern may describe hierarchical names such as /usr/*/bin/ed (assuming the Separator is '/').
Glob ignores file system errors such as I/O errors reading directories. The only possible returned error is ErrBadPattern, when pattern is malformed.
func (Path) IsAbs ¶
IsAbs reports whether the path is absolute.
Example ¶
package main import ( "fmt" pt "github.com/jonchun/pathtype" ) func main() { type path = pt.Path fmt.Println("On Unix:") fmt.Println(path("/home/gopher").IsAbs()) fmt.Println(path(".bashrc").IsAbs()) fmt.Println(path("..").IsAbs()) fmt.Println(path(".").IsAbs()) fmt.Println(path("/").IsAbs()) fmt.Println(path("").IsAbs()) }
Output: On Unix: true false false false true false
func (Path) Join ¶
Join joins any number of path elements into path, separating them with an OS specific Separator. Empty elements are ignored. The result is Cleaned. However, if the argument list is empty or all its elements are empty, Join returns an empty string. On Windows, the result will only be a UNC path if the first non-empty element is a UNC path.
Example ¶
package main import ( "fmt" pt "github.com/jonchun/pathtype" ) func main() { type path = pt.Path fmt.Println("On Unix:") fmt.Println(path("a").Join(path("b"), path("c"))) fmt.Println(path("a").Join(path("b/c"))) fmt.Println(path("a/b").Join(path("c"))) fmt.Println(path("a/b").Join(path("/c"))) fmt.Println(path("a/b").Join(path("../../../xyz"))) }
Output: On Unix: a/b/c a/b/c a/b/c a/b/c ../xyz
func (Path) Lchown ¶
Lchown changes the numeric uid and gid of the file at path. If the file is a symbolic link, it changes the uid and gid of the link itself. If there is an error, it will be of type *PathError.
On Windows, it always returns the syscall.EWINDOWS error, wrapped in *os.PathError.
func (Path) Link ¶
Link creates newname as a hard link to path. If there is an error, it will be of type *os.LinkError.
func (Path) Lstat ¶
Lstat returns a FileInfo describing the file at path. If the file is a symbolic link, the returned FileInfo describes the symbolic link. Lstat makes no attempt to follow the link. If there is an error, it will be of type *os.PathError.
func (Path) Match ¶
Match reports whether the path matches the shell file name pattern. The pattern syntax is:
pattern: { term } term: '*' matches any sequence of non-Separator characters '?' matches any single non-Separator 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 requires pattern to match all of name, not just a substring. The only possible returned error is ErrBadPattern, when pattern is malformed.
On Windows, escaping is disabled. Instead, '\\' is treated as path separator.
Example ¶
package main import ( "fmt" pt "github.com/jonchun/pathtype" ) func main() { type path = pt.Path fmt.Println("On Unix:") fmt.Println(path("/home/catch/foo").Match("/home/catch/*")) fmt.Println(path("/home/catch/foo/bar").Match("/home/catch/*")) fmt.Println(path("/home/gopher").Match("/home/?opher")) fmt.Println(path("/home/*").Match("/home/\\*")) }
Output: On Unix: true <nil> false <nil> true <nil> true <nil>
func (Path) Mkdir ¶
Mkdir creates a new directory at path with the specified permission bits (before umask). If there is an error, it will be of type *os.PathError.
func (Path) MkdirAll ¶
MkdirAll creates a directory at path, along with any necessary parents, and returns nil, or else returns an error. The permission bits perm (before umask) are used for all directories that MkdirAll creates. If path is already a directory, MkdirAll does nothing and returns nil.
func (Path) MkdirTemp ¶
MkdirTemp creates a new temporary directory at path and returns the pathname of the new directory. The new directory's name is generated by adding a random string to the end of pattern. If pattern includes a "*", the random string replaces the last "*" instead. If path is empty, MkdirTemp uses the default directory for temporary files, as returned by TempDir. Multiple programs or goroutines calling MkdirTemp simultaneously will not choose the same directory. It is the caller's responsibility to remove the directory when it is no longer needed.
func (Path) Open ¶
Open opens the file at path for reading. If successful, methods on the returned file can be used for reading; the associated file descriptor has mode os.O_RDONLY. If there is an error, it will be of type *os.PathError.
func (Path) OpenFile ¶
OpenFile is the generalized open call; most users will use Open or Create instead. It opens the file at path with specified flag (O_RDONLY etc.). If the file does not exist, and the O_CREATE flag is passed, it is created with mode perm (before umask). If successful, methods on the returned File can be used for I/O. If there is an error, it will be of type *os.PathError.
func (Path) ReadDirFS ¶
ReadDirFS reads the directory at path in FS fsys. and returns a list of directory entries sorted by filename.
func (Path) Readlink ¶
Readlink returns the destination of the symbolic link at path. If there is an error, it will be of type *os.PathError.
func (Path) Rel ¶
Rel returns a relative path that is lexically equivalent to targpath when joined to path with an intervening separator. That is, path.Join(path.Rel(targpath)) is equivalent to targpath itself. On success, the returned path will always be relative to path, even if path and targpath share no elements. An error is returned if targpath can't be made relative to path or if knowing the current working directory would be necessary to compute it. Rel calls Clean on the result.
Example ¶
package main import ( "fmt" pt "github.com/jonchun/pathtype" ) func main() { type path = pt.Path paths := []path{ path("/a/b/c"), path("/b/c"), path("./b/c"), } base := path("/a") fmt.Println("On Unix:") for _, p := range paths { rel, err := base.Rel(p) fmt.Printf("%q: %q %v\n", p, rel, err) } }
Output: On Unix: "/a/b/c": "b/c" <nil> "/b/c": "../b/c" <nil> "./b/c": "" Rel: can't make ./b/c relative to /a
func (Path) RemoveAll ¶
RemoveAll removes path and any children it contains. It removes everything it can but returns the first error it encounters. If the path does not exist, RemoveAll returns nil (no error). If there is an error, it will be of type *os.PathError.
func (Path) Rename ¶
Rename renames (moves) path to newpath. If newpath already exists and is not a directory, Rename replaces it. OS-specific restrictions may apply when path and newpath are in different directories. If there is an error, it will be of type *os.LinkError.
func (Path) Split ¶
Split splits the path immediately following the final Separator, separating it into a directory and file name component. If there is no Separator in path, Split returns an empty dir and file set to path. The returned values have the property that path = dir+file.
Example ¶
package main import ( "fmt" pt "github.com/jonchun/pathtype" ) func main() { type path = pt.Path paths := []path{ path("/home/arnie/amelia.jpg"), path("/mnt/photos/"), path("rabbit.jpg"), path("/usr/local//go"), } fmt.Println("On Unix:") for _, p := range paths { dir, file := p.Split() fmt.Printf("input: %q\n\tdir: %q\n\tfile: %q\n", p, dir, file) } }
Output: On Unix: input: "/home/arnie/amelia.jpg" dir: "/home/arnie/" file: "amelia.jpg" input: "/mnt/photos/" dir: "/mnt/photos/" file: "" input: "rabbit.jpg" dir: "" file: "rabbit.jpg" input: "/usr/local//go" dir: "/usr/local//" file: "go"
func (Path) Stat ¶
Stat returns a FileInfo describing the file at path. If there is an error, it will be of type *os.PathError.
func (Path) Sub ¶
Sub returns an FS corresponding to the subtree rooted at fsys's directory located at path.
func (Path) Symlink ¶
Symlink creates newname as a symbolic link to the path. If there is an error, it will be of type *os.LinkError..
func (Path) ToSlash ¶
ToSlash returns the result of replacing each separator character in path with a slash ('/') character. Multiple separators are replaced by multiple slashes.
func (Path) Truncate ¶
Truncate changes the size of the path. If the file is a symbolic link, it changes the size of the link's target. If there is an error, it will be of type *os.PathError.
func (Path) ValidPath ¶
ValidPath reports whether the given path is valid for use in a call to Open.
Path names passed to open are UTF-8-encoded, unrooted, slash-separated sequences of path elements, like “x/y/z”. Path names must not contain an element that is “.” or “..” or the empty string, except for the special case that the root directory is named “.”. Paths must not start or end with a slash: “/x” and “x/” are invalid.
Note that paths are slash-separated on all systems, even Windows. Paths containing other characters such as backslash and colon are accepted as valid, but those characters must never be interpreted by an FS implementation as path element separators.
func (Path) VolumeName ¶
VolumeName returns leading volume name. Given "C:\foo\bar" it returns "C:" on Windows. Given "\\host\share\foo" it returns "\\host\share". On other platforms it returns "".
func (Path) Walk ¶
Walk walks the file tree rooted at path, calling fn for each file or directory in the tree, including path.
All errors that arise visiting files and directories are filtered by fn: see the WalkFunc documentation for details.
The files are walked in lexical order, which makes the output deterministic but requires Walk to read an entire directory into memory before proceeding to walk that directory.
Walk does not follow symbolic links.
Walk is less efficient than WalkDir, introduced in Go 1.16, which avoids calling os.Lstat on every visited file or directory.
func (Path) WalkDir ¶
func (path Path) WalkDir(fn WalkDirFunc) error
WalkDir walks the file tree rooted at path, calling fn for each file or directory in the tree, including path.
All errors that arise visiting files and directories are filtered by fn: see the fs.WalkDirFunc documentation for details.
The files are walked in lexical order, which makes the output deterministic but requires WalkDir to read an entire directory into memory before proceeding to walk that directory.
WalkDir does not follow symbolic links.
type WalkDirFunc ¶
WalkDirFunc is the type of the function called by WalkDir to visit each file or directory.