挑戰:讀取大日誌檔案的最後兩行不將整個檔案載入到記憶體中,每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中文網其他相關文章!