課題: 大きなログ ファイルの最後の 2 行を読み取るファイル全体をメモリにロードせずに、このプロセスを 10 秒ごとに繰り返します。
Stat 関数: ファイル全体のロードを回避するにはファイルの長さは、OS パッケージの Stat() 関数を使用して取得できます。これにより、ファイル サイズがバイト単位で示されます。
シークまたは前方読み取り:
質問に示されている例を考えてみましょう:
コード スニペット:
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) } }
この例では:
以上がGo で大きなファイルの最後の行を 10 秒ごとに効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。