Herausforderung: Lesen der letzten beiden Zeilen einer großen Protokolldatei ohne die gesamte Datei in den Speicher zu laden, diesen Vorgang alle 10 Sekunden wiederholen.
Stat-Funktion: Um das Laden der gesamten Datei zu vermeiden In den Speicher kann die Länge der Datei mithilfe der Funktion Stat() des Betriebssystempakets ermittelt werden. Dies gibt die Dateigröße in Bytes an.
Suchen oder Vorlesen:
Betrachten Sie das Beispiel in Ihrer Frage:
Code-Snippet:
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) } }
In diesem Beispiel:
Das obige ist der detaillierte Inhalt vonWie kann ich alle 10 Sekunden effizient die letzten Zeilen einer großen Datei in Go lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!