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

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

DDD
Libérer: 2024-11-07 11:43:03
original
1049 Les gens l'ont consulté

How to Efficiently Read the Last Lines from a Large File in Go Every 10 Seconds?

Comment lire les dernières lignes d'un gros fichier avec Go toutes les 10 secondes

Défi : Lire les deux dernières lignes d'un gros fichier journal sans charger l'intégralité du fichier en mémoire, en répétant ce processus toutes les 10 secondes.

Solution : Utiliser Seek ou ReadAt et Stat

Fonction Stat :Pour éviter de charger l'intégralité du fichier en mémoire, la longueur du fichier peut être obtenue à l'aide de la fonction Stat() du package os. Ceci fournit la taille du fichier en octets.

Recherche ou lecture avant :

  • Seek() peut être utilisé pour déplacer le pointeur de fichier vers l'emplacement approprié. La lecture d'un nombre spécifique d'octets à partir de cette position récupérera les lignes souhaitées.
  • Alternativement, la fonction ReadAt() peut être utilisée pour lire un nombre spécifique d'octets à partir d'une position particulière.

Considérez l'exemple fourni dans votre question :

Extrait de code :

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)
    }

}
Copier après la connexion

Dans cet exemple :

  • Le La fonction Stat() est utilisée pour obtenir la taille du fichier.
  • ReadAt() est utilisée pour lire 62 octets à partir d'une position spécifique (taille du fichier - 62).
  • Les deux dernières lignes de le fichier journal, stocké sous forme d'octets, est ensuite imprimé.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal