Maison > développement back-end > Golang > Comment puis-je lire efficacement les deux dernières lignes d'un fichier volumineux en Go toutes les 10 secondes ?

Comment puis-je lire efficacement les deux dernières lignes d'un fichier volumineux en Go toutes les 10 secondes ?

Patricia Arquette
Libérer: 2024-11-08 08:50:02
original
786 Les gens l'ont consulté

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

Lecture incrémentielle des dernières lignes d'un fichier volumineux dans Go

Dans ce scénario, nous visons à lire les deux dernières lignes d'un gros journal fichier sans le charger en mémoire et en répétant ce processus toutes les 10 secondes.

Dans l'extrait de code Go fourni :

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)
    }
Copier après la connexion

Nous pouvons améliorer ses fonctionnalités pour atteindre notre objectif en exploitant le fichier. Méthode Stat pour déterminer la taille du fichier et la méthode file.ReadAt pour lire les données à partir d'un décalage d'octet spécifique dans le fichier.

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)
    }
}
Copier après la connexion

En utilisant les informations sur la taille du fichier et la lecture directe du décalage d'octet, nous pouvons lire efficacement le deux dernières lignes du fichier sans le charger entièrement en mémoire et répétez ce processus toutes les 10 secondes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal