Documentation ¶
Overview ¶
Pathutil is I/O utility primary inspired by David Golden's [Path::Tiny](https://metacpan.org/pod/Path::Tiny). It is friendlier to use than path(https://golang.org/pkg/path/), filepath(https://golang.org/pkg/path/filepath/) and provides many of other functions which isn't in core libraries (like `Copy` for example)
SYNOPSIS
import ( "fmt" "github.com/JaSei/pathutil-go" ) // creating pathutil objects dir, _ := pathutil.New("/tmp") foo, _ := pathutil.New("foo.txt") subdir, _ := dir.Child("foo") bar, _ := subdir.Child("bar.txt") // stringifies as cleaned up path file, _ := pathutil.New("./foo.txt") fmt.Println(file) // "foo.txt" // reading files guts, _ := file.Slurp() lines, _ := file.Lines() // writing files bar.Spew(data) // reading directories children, _ := dir.Children() for _, child := range children { }
SEE ALSO ¶
* [Path::Tiny](https://metacpan.org/pod/Path::Tiny) for Perl
* [better files](https://github.com/pathikrit/better-files) for Scala
* [pathlib](https://docs.python.org/3/library/pathlib.html) for python
BREAKING CHANGE 0.3.1 -> 1.0.0
1. `NewTempFile` or `NewTempDir` don't need TempOpt struct
//0.3.1 default pathutil.NewTempFile(pathutil.TempOpt{}) //0.3.1 custom pathutil.NewTempFile(pathutil.TempOpt{Dir: "/test", Prefix: "pre"}) //1.0.0 default pathutil.NewTempFile() //1.0.0 custom pathutil.NewTempFile(Dir("/test"), Prefix("pre"))
2. `New` method parameter allowed `string` type or type implements `fmt.Stringer` interface
//0.3.1 pathutil.New(otherPath.String(), "test") //1.0.0 pathutil.New(otherPath, "test")
This shouldn't be breaking change, but if you use in some code variadic parameter as input of `pathutil.New`, then can be problem
//0.3.1 func(p ...string) { pathutil.New(p...) }("a", "b") //1.0.0 func(p ...string) { n := make([]interface{}, len(p)) for i, v := range p { n[i] = v } pathutil.New(n...) }("a", "b")
3. There is new (more handfull) crypto API
//0.3.1 import ( "crypto" "github.com/JaSei/pathutil-go" ) ... hash, err := path.Crypto(crypto.SHA256) if err == nil { fmt.Printf("%s\t%s\n", hash.HexSum(), path.String()) } //1.0.0 import ( "github.com/JaSei/pathutil-go" ) ... hash, err := path.CryptoSha256() if err == nil { fmt.Printf("%s\t%s\n", hash, path.String()) }
This new crypto API return hashutil(github.com/JaSei/hashutil-go) struct which is more handfull for compare, transformation and next hash manipulation.
Index ¶
- type LinesFunc
- type Path
- type PathImpl
- func (path PathImpl) Append(data string) error
- func (path PathImpl) AppendBytes(data []byte) (err error)
- func (path PathImpl) Basename() string
- func (path PathImpl) Canonpath() string
- func (path PathImpl) Chdir() (Path, error)
- func (path PathImpl) Child(childName ...string) (Path, error)
- func (path PathImpl) Children() ([]Path, error)
- func (srcPath PathImpl) CopyFile(dst string) (p Path, err error)
- func (path PathImpl) CopyFrom(reader io.Reader) (copyied int64, err error)
- func (path PathImpl) CryptoMd5() (hashutil.Md5, error)
- func (path PathImpl) CryptoSha1() (hashutil.Sha1, error)
- func (path PathImpl) CryptoSha256() (hashutil.Sha256, error)
- func (path PathImpl) CryptoSha384() (hashutil.Sha384, error)
- func (path PathImpl) CryptoSha512() (hashutil.Sha512, error)
- func (path PathImpl) Exists() bool
- func (path PathImpl) IsDir() bool
- func (path PathImpl) IsFile() bool
- func (path PathImpl) IsRegularFile() bool
- func (path PathImpl) Lines() ([]string, error)
- func (path PathImpl) LinesWalker(linesFunc LinesFunc) (err error)
- func (path PathImpl) MakePath() error
- func (path PathImpl) MakePathMode(mode os.FileMode) error
- func (path PathImpl) OpenReader() (ReadSeekCloser, error)
- func (path PathImpl) OpenWriter() (*os.File, error)
- func (path PathImpl) OpenWriterAppend() (*os.File, error)
- func (path PathImpl) Parent() Path
- func (path PathImpl) Remove() error
- func (path PathImpl) RemoveTree() error
- func (old PathImpl) Rename(new string) (Path, error)
- func (path PathImpl) Slurp() (string, error)
- func (path PathImpl) SlurpBytes() ([]byte, error)
- func (path PathImpl) Spew(content string) (err error)
- func (path PathImpl) SpewBytes(bytes []byte) (err error)
- func (path PathImpl) Stat() (os.FileInfo, error)
- func (path PathImpl) String() string
- func (path PathImpl) Visit(visitFunc VisitFunc, visitOpt VisitOpt)
- type ReadSeekCloser
- type TempOpt
- type VisitFunc
- type VisitOpt
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Path ¶
type Path interface { String() string Canonpath() string Basename() string Chdir() (Path, error) Rename(string) (Path, error) Stat() (os.FileInfo, error) IsDir() bool Exists() bool IsFile() bool IsRegularFile() bool Remove() error RemoveTree() error Visit(VisitFunc, VisitOpt) CopyFile(string) (Path, error) CopyFrom(io.Reader) (int64, error) CryptoMd5() (hashutil.Md5, error) CryptoSha1() (hashutil.Sha1, error) CryptoSha256() (hashutil.Sha256, error) CryptoSha384() (hashutil.Sha384, error) CryptoSha512() (hashutil.Sha512, error) MakePath() error MakePathMode(os.FileMode) error OpenReader() (ReadSeekCloser, error) OpenWriter() (*os.File, error) OpenWriterAppend() (*os.File, error) Slurp() (string, error) SlurpBytes() ([]byte, error) Spew(string) error SpewBytes([]byte) error Lines() ([]string, error) LinesWalker(LinesFunc) error Child(...string) (Path, error) Children() ([]Path, error) Parent() Path Append(string) error AppendBytes([]byte) error }
func Cwd ¶
Cwd create new Path from current working directory optional is possible to set subpath
for example
gitConfigPath, err := pathutil.Cwd('.git/config')
func Home ¶
Home create new Path from home directory optional is possible to set subpath
for example
initPath, err := pathutil.Home('.config/nvim/init.vim')
(internally use https://github.com/mitchellh/go-homedir library)
func New ¶
New construct Path
for example
path := New("/home/test", ".vimrc")
input can be `string` or type implements `fmt.Stringer` interface
func NewTempDir ¶
NewTempDir create temp directory
for cleanup use `defer`
tempdir, err := pathutil.NewTempDir() defer tempdir.RemoveTree()
if you need set directory or prefix, then use `TempDir` and/or `TempPrefix`
temp, err := NewTempFile(TempDir("/home/my/test"), TempPrefix("myfile")) ...
func NewTempFile ¶
NewTempFile create temp file
for cleanup use defer
temp, err := NewTempFile(TempOpt{}) defer temp.Remove()
if you need only temp file name, you must delete file
temp, err := NewTempFile() temp.Remove()
if you need set directory or prefix, then use `TempDir` and/or `TempPrefix`
temp, err := NewTempFile(TempDir("/home/my/test"), TempPrefix("myfile")) ...
type PathImpl ¶
type PathImpl struct {
// contains filtered or unexported fields
}
type PathImpl implements Path interface
func (PathImpl) AppendBytes ¶
func (PathImpl) Chdir ¶
Chdir change current working directory do the path and return old current working directory
func (PathImpl) CopyFrom ¶
CopyFrom copy stream from reader to path (file after copy close and sync)
func (PathImpl) CryptoMd5 ¶ added in v1.0.0
CryptoMd5 method access hash funcionality like Path::Tiny Digest return hashutil.Md5(github.com/JaSei/hashutil-go) type
for example print of Md5 hexstring
hash, err := path.CryptoMd5() fmt.Println(hash)
func (PathImpl) CryptoSha1 ¶ added in v1.0.0
CryptoSha1 method access hash funcionality like Path::Tiny Digest return hashutil.Sha1(github.com/JaSei/hashutil-go) type
for example print of Sha1 hexstring
hash, err := path.CryptoSha1() fmt.Println(hash)
func (PathImpl) CryptoSha256 ¶ added in v1.0.0
CryptoSha256 method access hash funcionality like Path::Tiny Digest return hashutil.Sha256(github.com/JaSei/hashutil-go) type
for example print of Sha256 hexstring
hash, err := path.CryptoSha256() fmt.Println(hash)
func (PathImpl) CryptoSha384 ¶ added in v1.0.0
CryptoSha384 method access hash funcionality like Path::Tiny Digest return hashutil.Sha384(github.com/JaSei/hashutil-go) type
for example print of Sha284 hexstring
hash, err := path.CryptoSha284() fmt.Println(hash)
func (PathImpl) CryptoSha512 ¶ added in v1.0.0
CryptoSha512 method access hash funcionality like Path::Tiny Digest return hashutil.Sha512(github.com/JaSei/hashutil-go) type
for example print of Sha512 hexstring
hash, err := path.CryptoSha512() fmt.Println(hash)
func (PathImpl) IsFile ¶
IsFile return true is path exists and not dir (symlinks, devs, regular files)
func (PathImpl) IsRegularFile ¶
IsRegularFile return true if path is regular file (wihtout devs, symlinks, ...)
func (PathImpl) LinesWalker ¶
LinesWalker read lines in file and call LinesFunc with line parameter
for example:
lines := make([]string, 0) linesFuncError := path.LinesWalker(func(line string) { lines = append(lines, line) })
func (PathImpl) MakePath ¶
Make path create directory(ies) in path if not exists (like `mkdir -p`) with default 0777 mode if you need set mode, use `MakePathMode`
func (PathImpl) MakePathMode ¶
Make path create directory(ies) in path if not exists (like `mkdir -p`) with default given mode
func (PathImpl) OpenReader ¶
func (path PathImpl) OpenReader() (ReadSeekCloser, error)
OpenReader retun ReadSeekCloser interface
for example:
path, _ := New("/bla/bla") r, err := path.OpenReader() if err != nil { panic(err) } defer r.Close()
func (PathImpl) OpenWriter ¶
OpenWriter retun *os.File as new file (like `>>`)
for example:
path, _ := NewFilePath(FilePathOpt{}) file, err := path.OpenWriter() if err != nil { panic(err) } defer func(){ file.Close() file.Sync() }() writer.Write(some_bytes)
func (PathImpl) OpenWriterAppend ¶
OpenWriterAppend create new writer, similar as `OpenWriter` but append (like `>`)
func (PathImpl) Parent ¶
path,_ := New("foo/bar/baz"); parent := path.Parent() // foo/bar path,_ := New("foo/wible.txt"); parent := path.Parent() // foo
Returns a `Path` of corresponding to the parent directory of the original directory or file
func (PathImpl) RemoveTree ¶
Remove tree of directory(ies) include files
err := path.RemoveTree
like os.RemoveAll
func (PathImpl) SlurpBytes ¶
type TempOpt ¶
type TempOpt func(*tempOpt)
TempOpt is func for configure tempdir or tempfile
func TempDir ¶ added in v1.0.0
TempDir set directory where is temp file/dir create, empty string `""` (default) means TEMPDIR (`os.TempDir`)
func TempPrefix ¶ added in v1.0.0
TempPrefix set name beginning with prefix