Heim > Backend-Entwicklung > Golang > Wie kann ich alle 10 Sekunden effizient die letzten beiden Zeilen einer großen Datei in Go lesen?

Wie kann ich alle 10 Sekunden effizient die letzten beiden Zeilen einer großen Datei in Go lesen?

Patricia Arquette
Freigeben: 2024-11-08 08:50:02
Original
786 Leute haben es durchsucht

How Can I Efficiently Read the Last Two Lines of a Large File in Go Every 10 Seconds?

Inkrementelles Lesen der letzten Zeilen einer großen Datei in Go

In diesem Szenario wollen wir die letzten beiden Zeilen eines großen Protokolls lesen Datei, ohne sie in den Speicher zu laden und diesen Vorgang alle 10 Sekunden zu wiederholen.

Im bereitgestellten Go-Code-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)
    }
Nach dem Login kopieren

Wir können ihre Funktionalität verbessern, um unser Ziel zu erreichen, indem wir die Datei nutzen. Stat-Methode zum Bestimmen der Dateigröße und die file.ReadAt-Methode zum Lesen von Daten aus einem bestimmten Byte-Offset innerhalb der Datei.

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)
    }
}
Nach dem Login kopieren

Durch die Nutzung von Dateigrößeninformationen und das direkte Lesen des Byte-Offsets können wir die Datei effizient lesen Laden Sie die letzten beiden Zeilen der Datei herunter, ohne sie vollständig in den Speicher zu laden, und wiederholen Sie diesen Vorgang alle 10 Sekunden.

Das obige ist der detaillierte Inhalt vonWie kann ich alle 10 Sekunden effizient die letzten beiden Zeilen einer großen Datei in Go lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage