在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中文網其他相關文章!