在 Go 中增量读取大文件的最后几行
在这种情况下,我们的目标是读取大日志的最后两行文件而不将其加载到内存中并每 10 秒重复此过程。
在提供的 Go 代码内snippet:
package main import ( "fmt" "time" "os" ) const MYFILE = "logfile.log" func main() { c := time.Tick(10 * time.Second) for now := range c { readFile(MYFILE) } } func readFile(fname string){ file, err:=os.Open(fname) if err!=nil{ panic(err) }
我们可以通过利用 file.Stat 方法来确定文件的大小以及利用 file.ReadAt 方法从文件中的特定字节偏移读取数据来增强其功能以实现我们的目标。
import ( "fmt" "os" "time" ) const MYFILE = "logfile.log" func main() { c := time.Tick(10 * time.Second) for _ = range c { readFile(MYFILE) } } func readFile(fname string) { file, err := os.Open(fname) if err != nil { panic(err) } defer file.Close() // Determine the size of the file stat, statErr := file.Stat() if statErr != nil { panic(statErr) } fileSize := stat.Size() // Assuming you know the size of each line in bytes (e.g., 62) start := fileSize - (62 * 2) // Read the last two lines from the file buf := make([]byte, 62 * 2) _, err = file.ReadAt(buf, start) if err == nil { fmt.Printf("%s\n", buf) } }
通过利用文件大小信息和直接字节偏移读取,我们可以高效地读取文件的最后两行,而无需将其完全加载到内存中,并且每 10 次重复此过程秒。
以上是Go中如何高效地每10秒读取一次大文件的最后两行?的详细内容。更多信息请关注PHP中文网其他相关文章!