Categorygithub.com/jasei/pathutil-go
modulepackage
0.3.1
Repository: https://github.com/jasei/pathutil-go.git
Documentation: pkg.go.dev

# README

pathutil

Release Software License Travis Go Report Card GoDoc codecov.io Sourcegraph

Pathutil is I/O utility primary inspired by David Golden's Path::Tiny. It is friendlier to use than 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

Usage

type CryptoHash

type CryptoHash struct {
	hash.Hash
}

func (*CryptoHash) BinSum

func (hash *CryptoHash) BinSum() []byte

BinSum method is like hash.Sum(nil)

func (*CryptoHash) HexSum

func (hash *CryptoHash) HexSum() string

HexSum method retun hexstring representation of hash.Sum

type LinesFunc

type LinesFunc func(string)

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)

	Crypto(crypto.Hash) (*CryptoHash, 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

func Cwd(subpath ...string) (Path, error)

Cwd create new Path from current working directory optional is possible to set subpath

for example

gitConfigPath, err := pathutil.Cwd('.git/config')

func Home

func Home(subpath ...string) (Path, error)

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

func New(path ...string) (Path, error)

New construct Path

for example

path := New("/home/test", ".vimrc")

if you can use Path in New, you must use .String() method

func NewTempDir

func NewTempDir(options TempOpt) (Path, error)

NewTempDir create temp directory

for cleanup use defer

	tempdir, err := pathutil.NewTempDir(TempOpt{})
 defer tempdir.RemoveTree()

func NewTempFile

func NewTempFile(options TempOpt) (p Path, err error)

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(TempFileOpt{})
temp.Remove()

type PathImpl

type PathImpl struct {
}

type PathImpl implements Path interface

func (PathImpl) Append

func (path PathImpl) Append(data string) error

func (PathImpl) AppendBytes

func (path PathImpl) AppendBytes(data []byte) (err error)

func (PathImpl) Basename

func (path PathImpl) Basename() string

Basename like path/filepath.Base

func (PathImpl) Canonpath

func (path PathImpl) Canonpath() string

Canonpath retrun path with right os separator

func (PathImpl) Chdir

func (path PathImpl) Chdir() (Path, error)

Chdir change current working directory do the path and return old current working directory

func (PathImpl) Child

func (path PathImpl) Child(childName ...string) (Path, error)

func (PathImpl) Children

func (path PathImpl) Children() ([]Path, error)

func (PathImpl) CopyFile

func (srcPath PathImpl) CopyFile(dst string) (p Path, err error)

func (PathImpl) CopyFrom

func (path PathImpl) CopyFrom(reader io.Reader) (copyied int64, err error)

CopyFrom copy stream from reader to path (file after copy close and sync)

func (PathImpl) Crypto

func (path PathImpl) Crypto(hash crypto.Hash) (c *CryptoHash, err error)

func (PathImpl) Exists

func (path PathImpl) Exists() bool

func (PathImpl) IsDir

func (path PathImpl) IsDir() bool

IsDir return true if path is dir

func (PathImpl) IsFile

func (path PathImpl) IsFile() bool

IsFile return true is path exists and not dir (symlinks, devs, regular files)

func (PathImpl) IsRegularFile

func (path PathImpl) IsRegularFile() bool

IsRegularFile return true if path is regular file (wihtout devs, symlinks, ...)

func (PathImpl) Lines

func (path PathImpl) Lines() ([]string, error)

Read all lines and return as array of lines

func (PathImpl) LinesWalker

func (path PathImpl) LinesWalker(linesFunc LinesFunc) (err error)

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

func (path PathImpl) MakePath() error

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

func (path PathImpl) MakePathMode(mode os.FileMode) error

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

func (path PathImpl) OpenWriter() (*os.File, error)

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

func (path PathImpl) OpenWriterAppend() (*os.File, error)

OpenWriterAppend create new writer, similar as OpenWriter but append (like >)

func (PathImpl) Parent

func (path PathImpl) Parent() Path
	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) Remove

func (path PathImpl) Remove() error

Remove file

err := path.Remove()

like os.Remove

func (PathImpl) RemoveTree

func (path PathImpl) RemoveTree() error

Remove tree of directory(ies) include files

err := path.RemoveTree

like os.RemoveAll

func (PathImpl) Rename

func (old PathImpl) Rename(new string) (Path, error)

Rename path to new path

func (PathImpl) Slurp

func (path PathImpl) Slurp() (string, error)

Slurp read all file like ioutil.ReadFile

func (PathImpl) SlurpBytes

func (path PathImpl) SlurpBytes() ([]byte, error)

func (PathImpl) Spew

func (path PathImpl) Spew(content string) (err error)

Spew write string to file

func (PathImpl) SpewBytes

func (path PathImpl) SpewBytes(bytes []byte) (err error)

SpewBytes write bytes to file

func (PathImpl) Stat

func (path PathImpl) Stat() (os.FileInfo, error)

Stat return os.FileInfo

func (PathImpl) String

func (path PathImpl) String() string

String return stable string representation of path this representation is linux like (slash as separator) for os specific string use Canonpath method

func (PathImpl) Visit

func (path PathImpl) Visit(visitFunc VisitFunc, visitOpt VisitOpt)

type ReadSeekCloser

type ReadSeekCloser interface {
	io.Reader
	io.Seeker
	io.Closer
}

type TempOpt

type TempOpt struct {
	// directory where is temp file/dir create, empty string `""` (default) means TEMPDIR (`os.TempDir`)
	Dir string
	// name beginning with prefix
	Prefix string
}

TempOpt is struct for configure new tempdir or tempfile

type VisitFunc

type VisitFunc func(path Path)

type VisitOpt

type VisitOpt struct {
	Recurse bool
}

Contributing

Contributions are very much welcome.

Makefile

Makefile provides several handy rules, like README.md generator , setup for prepare build/dev environment, test, cover, etc...

Try make help for more information.

Before pull request

please try:

  • run tests (make test)
  • run linter (make lint)
  • if your IDE don't automaticaly do go fmt, run go fmt (make fmt)

README

README.md are generate from template .godocdown.tmpl and code documentation via godocdown.

Never edit README.md direct, because your change will be lost.

# Packages

No description provided by the author

# Functions

Cwd create new Path from current working directory optional is possible to set subpath for example gitConfigPath, err := pathutil.Cwd('.git/config') .
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).
New construct Path for example path := New("/home/test", ".vimrc") if you can use `Path` in `New`, you must use `.String()` method.
NewTempDir create temp directory for cleanup use `defer` tempdir, err := pathutil.NewTempDir(TempOpt{}) defer tempdir.RemoveTree().
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(TempFileOpt{}) temp.Remove() .

# Structs

No description provided by the author
type PathImpl implements Path interface.
TempOpt is struct for configure new tempdir or tempfile.
No description provided by the author

# Interfaces

No description provided by the author
No description provided by the author

# Type aliases

No description provided by the author
No description provided by the author