Skip to content
Go File Line Seeker
Go
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore gitignore logs Jan 21, 2017
.travis.yml
LICENSE Initial commit Jan 21, 2017
README.md
fls.go delete wrappers Jan 22, 2017
fls_test.go

README.md

File Line Seeker

Build Status

Seek to any line in a file without reading the whole file into memory. Works similar to os.File.Seek.

Usage

API

https://godoc.org/github.com/StoicPerlman/fls

Example

import "github.com/stoicperlman/fls"

// use fls.LineFile(file *os.File) *File
// for files opened from os package
f, _ := os.OpenFile("test.log", os.O_CREATE|os.O_RDONLY, 0600)
defer f.Close()
file := fls.LineFile(f)

pos, err := file.SeekLine(-10, io.SeekEnd)

// use os file wrappers to open without os package
// fls.OpenFile(name string, flag int, perm os.FileMode) (*File, error)
f, err := fls.OpenFile("test.log", os.O_CREATE|os.O_WRONLY, 0600)
defer f.Close()

pos, err := f.SeekLine(-10, io.SeekEnd)

Detail

func (file *File) SeekLine(lines int64, whence int) (int64, error)

  • positive lines will move forward in file
  • 0 lines will move to begining of line
  • negative lines will move backwards in file
file.SeekLine(-1, io.SeekStart) // return EOF
file.SeekLine(0, io.SeekStart) // return begining line 1
file.SeekLine(1, io.SeekStart) // return begining line 2

file.SeekLine(-1, io.SeekCurrent) // return begining of previous line
file.SeekLine(0, io.SeekCurrent) // return begining of current line
file.SeekLine(1, io.SeekCurrent) // return begining of next line

file.SeekLine(-1, io.SeekEnd) // return begining of second to last line
file.SeekLine(0, io.SeekEnd) // return begining of last line
file.SeekLine(1, io.SeekEnd) // return EOF
You can’t perform that action at this time.