挑战:读取大日志文件的最后两行不将整个文件加载到内存中,每 10 秒重复此过程。
Stat 函数: 避免加载整个文件写入内存后,可以使用 os 包的 Stat() 函数获取文件的长度。这提供了以字节为单位的文件大小。
向前查找或读取:
考虑您问题中提供的示例:
代码片段:
package main 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() buf := make([]byte, 62) stat, statErr := file.Stat() if statErr != nil { panic(statErr) } start := stat.Size() - 62 _, err = file.ReadAt(buf, start) if err == nil { fmt.Printf("%s\n", buf) } }
在此示例中:
以上是如何在 Go 中每 10 秒高效地读取一个大文件的最后一行?的详细内容。更多信息请关注PHP中文网其他相关文章!