首頁 > 後端開發 > Golang > Go中如何有效率地每10秒讀取一次大檔案的最後兩行?

Go中如何有效率地每10秒讀取一次大檔案的最後兩行?

Patricia Arquette
發布: 2024-11-08 08:50:02
原創
790 人瀏覽過

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

在Go 中增量讀取大檔案的最後幾行

在這種情況下,我們的目標是讀取大日誌的最後兩行

在提供的Go在程式碼片段中:

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)
    }
登入後複製

我們可以透過利用該檔案來增強其功能以實現我們的目標。 Stat 方法決定檔案的大小和檔案。 ReadAt 方法從檔案內特定位元組偏移處讀取資料。

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)
    }
}
登入後複製

利用檔案大小資訊和直接位元組偏移讀取,我們可以有效地讀取檔案檔案的最後兩行,而不完全載入記憶體中,並每10 秒重複此過程。

以上是Go中如何有效率地每10秒讀取一次大檔案的最後兩行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板