请教一下,Go如何只读取文件的末尾几行?

我想读取一个日志文件,但不需要整个读取,只需要读取末尾几行,在 Go 中怎么实现?

共 6 个回复


stevewang

用os.File.Seek定位到文件末尾,读取一段数据,然后倒序查找回车符。

# 0

stevewang

可以想想怎么实现会更优雅一些,也许可以实现一个io.Reader然后利用bufio.Reader.ReadLine。

# 1

yangsh

如何定位到文件末尾? fi, _ := f.Stat()

fi.Size() 是文件末尾吗?

# 2

stevewang

可以利用Stat()。比如fi.Size()是1124,缓冲区是1024字节,那么就先用os.File.Seek定位到相对os.SEEK_SET的100偏移位置,读出1024字节,然后再定位到0偏移位置,读取剩下的100字节。

# 3

yangsh

已搞定,谢谢

# 4

wzy0327

请问lz是怎么解决的呢?我也遇到类似问题

# 5