Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Options ¶
func NewOptions ¶
func NewOptions() *Options
Example ¶
opt := NewOptions() if opt == nil { return } fmt.Println(opt.FileBufDir) // output: fmt.Println(opt.UseFileBuf) // output: false fmt.Println(opt.FileBufPrefix) // output: fmt.Println(opt.Compress) // output: false
Output: false false
type Reader ¶
type Reader struct {
// contains filtered or unexported fields
}
Reader
func NewReader ¶
Example ¶
pth := "./test/test.txt" createFile(pth) r, err := NewReader(pth) if r == nil { return } fmt.Println(err) // output: <nil> fmt.Println(r.sts.Path != "") // output: true fmt.Println(r.sts.Size) // output: 20 fmt.Println(r.sts.Created != "") // output: true fmt.Println(r.f != nil) // output: true fmt.Println(r.rBuf != nil) // output: true fmt.Println(r.rGzip == nil) // output: true fmt.Println(r.rHshr != nil) // output: true fmt.Println(r.closed) // output: false // cleanup os.Remove(pth) os.Remove("./test")
Output: <nil> true 20 true true true true true false
func (*Reader) Close ¶
Example ¶
pth := "./test/test.txt" createFile(pth) r, _ := NewReader(pth) if r == nil { return } r.ReadLine() r.ReadLine() err := r.Close() fmt.Println(err) // output: <nil> fmt.Println(r.sts.Checksum) // output: 54f30d75cf7374c7e524a4530dbc93c2 fmt.Println(r.closed) // output: true // cleanup os.Remove(pth) os.Remove("./test")
Output: <nil> 54f30d75cf7374c7e524a4530dbc93c2 true
func (*Reader) Read ¶
Example ¶
pth := "./test/test.txt" createFile(pth) r, _ := NewReader(pth) if r == nil { return } b1 := make([]byte, 20) b2 := make([]byte, 20) n1, err1 := r.Read(b1) n2, err2 := r.Read(b2) fmt.Print(string(b1)) // output: test line, test line fmt.Println(n1) // output: 20 fmt.Println(err1) // output: <nil> fmt.Println(n2) // output: 0 fmt.Println(err2) // output: EOF fmt.Println(r.sts.ByteCnt) // output: 20 fmt.Println(r.sts.LineCnt) // output: 0 // cleanup os.Remove(pth) os.Remove("./test")
Output: test line test line 20 <nil> 0 EOF 20 0
func (*Reader) ReadLine ¶
Example ¶
pth := "./test/test.txt" createFile(pth) r, _ := NewReader(pth) if r == nil { return } ln1, err1 := r.ReadLine() ln2, err2 := r.ReadLine() ln3, err3 := r.ReadLine() fmt.Println(string(ln1)) // output: test line fmt.Println(string(ln2)) // output: test line fmt.Println(string(ln3)) // output: fmt.Println(err1) // output: <nil> fmt.Println(err2) // output: <nil> fmt.Println(err3) // output: EOF fmt.Println(r.sts.ByteCnt) // output: 20 fmt.Println(r.sts.LineCnt) // output: 2 // cleanup os.Remove(pth) os.Remove("./test")
Output: test line test line <nil> <nil> EOF 20 2
type Writer ¶
type Writer struct {
// contains filtered or unexported fields
}
Example (CopyAndClean) ¶
// memory buffer to file w, _ := NewWriter("./test/test.txt", nil) if w == nil { return } w.WriteLine([]byte("test line")) w.WriteLine([]byte("test line")) n, err := w.copyAndClean() // read file f, _ := os.Open(w.sts.Path) if f == nil { return } b := make([]byte, 20) rn, _ := f.Read(b) // check actual size fInfo, _ := os.Stat(w.sts.Path) if fInfo == nil { return } fmt.Println(n) // output: 20 fmt.Println(err) // output: <nil> fmt.Print(string(b)) // output: test line, test line fmt.Println(rn) // output: 20 fmt.Println(fInfo.Size()) // output: 20 // cleanup os.Remove("./test")
Output: 20 <nil> test line test line 20 20
Example (CopyAndCleanTmpFile) ¶
// file buffer to file opt := NewOptions() opt.UseFileBuf = true opt.FileBufDir = "./test/tmp" w, _ := NewWriter("./test/test.txt", opt) if w == nil { return } w.WriteLine([]byte("test line")) w.WriteLine([]byte("test line")) n, err := w.copyAndClean() // read file f, _ := os.Open(w.sts.Path) if f == nil { return } b := make([]byte, 20) rn, _ := f.Read(b) // check actual size fInfo, _ := os.Stat(w.sts.Path) if fInfo == nil { return } // tmp file does not exist _, tmpErr := os.Open(w.tmpPth) if tmpErr == nil { return } removed := strings.Contains(tmpErr.Error(), "no such file or directory") fmt.Println(n) // output: 20 fmt.Println(err) // output: <nil> fmt.Print(string(b)) // output: test line, test line fmt.Println(rn) // output: 20 fmt.Println(fInfo.Size()) // output: 20 fmt.Println(removed) // output: true // cleanup os.Remove("./test/tmp") os.Remove("./test/test.txt") os.Remove("./test")
Output: 20 <nil> test line test line 20 20 true
Example (CopyAndCleanTmpFileErr) ¶
// file buffer to file opt := NewOptions() opt.UseFileBuf = true opt.FileBufDir = "./test/tmp" w, _ := NewWriter("./test/test.txt", opt) if w == nil { return } w.WriteLine([]byte("test line")) w.WriteLine([]byte("test line")) w.sts.Path = "/bad/file.txt" n, err := w.copyAndClean() if err == nil { return } notCopied := strings.Contains(err.Error(), "no such") // tmp file does not exist _, tmpErr := os.Open(w.tmpPth) if tmpErr == nil { return } tmpRemoved := strings.Contains(tmpErr.Error(), "no such file or directory") fmt.Println(n) // output: 0 fmt.Println(notCopied) // output: true fmt.Println(tmpRemoved) // output: true // cleanup os.Remove("./test/tmp") os.Remove("./test")
Output: 0 true true
Example (CopyAndCleanTmpFileToDev) ¶
// file buffer to device file opt := NewOptions() opt.UseFileBuf = true opt.FileBufDir = "./test/tmp" w, _ := NewWriter("/dev/stdout", opt) if w == nil { return } w.WriteLine([]byte("test line")) w.WriteLine([]byte("test line")) n, err := w.copyAndClean() // output: test line, test line // tmp file does not exist _, tmpErr := os.Open(w.tmpPth) if tmpErr == nil { return } removed := strings.Contains(tmpErr.Error(), "no such file or directory") fmt.Println(n) // output: 20 fmt.Println(err) // output: <nil> fmt.Println(removed) // output: true // cleanup os.Remove("./test/tmp") os.Remove("./test")
Output: test line test line 20 <nil> true
Example (CopyAndCleanToDev) ¶
// memory buffer to device file w, _ := NewWriter("/dev/stdout", nil) if w == nil { return } w.WriteLine([]byte("test line")) w.WriteLine([]byte("test line")) n, err := w.copyAndClean() // output: test line, test line fmt.Println(n) // output: 20 fmt.Println(err) // output: <nil>
Output: test line test line 20 <nil>
func NewWriter ¶
NewWriter will create a new local writer. - 'pth' is the full path (with filename) that will be written. If the final file extension is a supported compression format then the file will be compressed in that format. - 'append' indicates whether the write session will append the contents to an existing file or truncate and then write. The defaut is false which will truncate an existing file and then write. - 'lazy' set to 'true' will tell the writer to do a lazy write. This means that all write calls will write to memory first and then write to 'pth' when writing is complete with a final call to 'Close'. If Close is never called then the file will not be written.
When initializing a new writer, pth is checked for the correct write permissions. An error is returned if the writer will not have the correct permissions.
For lazy writing, the writer supports writing to memory or a temp file. The writer will use the temp file option if tmpDir and/or tmpPrefix is provided. The writer will remove a temp file with a call to Close.
Example ¶
w, err := NewWriter("./test/test.txt", nil) if w == nil { return } fmt.Println(strings.HasSuffix(w.sts.Path, "/test/test.txt")) // output: true fmt.Println(err) // output: <nil> os.Remove("./test") // cleanup test dir
Output: true <nil>
func (*Writer) Abort ¶
Abort will: - clear and close buffer - prevent further writing
Example ¶
w, _ := NewWriter("./test/test.txt", nil) if w == nil { return } err := w.Abort() fmt.Println(err) // output: <nil> os.Remove("./test") // cleanup test dir
Output: <nil>
func (*Writer) Close ¶
Close will: - calculate final checksum - set file size - set file created date - copy (mv) buffer to pth file - clear and close buffer - report any errors
Calling Abort after Close will do nothing. Writing after Close will not write and will not return a nil-error.
Example ¶
opt := NewOptions() opt.UseFileBuf = true opt.FileBufDir = "./test/tmp" opt.FileBufPrefix = "prefix_" w, _ := NewWriter("./test/test.txt", opt) if w == nil { return } w.WriteLine([]byte("test line")) w.WriteLine([]byte("test line")) err := w.Close() sts := w.Stats() // check that tmp file was cleaned up _, tmpErr := os.Open(w.tmpPth) if tmpErr == nil { return } removed := strings.Contains(tmpErr.Error(), "no such file or directory") fmt.Println(err) // output: <nil> fmt.Println(sts.Created != "") // output: true fmt.Println(sts.Checksum) // output: 54f30d75cf7374c7e524a4530dbc93c2 fmt.Println(removed) // output: true // cleanup os.Remove("./test/tmp") os.Remove("./test/test.txt") os.Remove("./test")
Output: <nil> true 54f30d75cf7374c7e524a4530dbc93c2 true
func (*Writer) Stats ¶
Example ¶
w, _ := NewWriter("./test/test.txt", nil) if w == nil { return } w.sts.Path = "test path" w.sts.Created = "test created" sts := w.Stats() fmt.Println(sts.Path) // output: test path fmt.Println(sts.Created) // output: test created os.Remove("./test") // cleanup test dir
Output: test path test created