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

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.




import ""

// 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)


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.