Go에서 대용량 파일의 마지막 줄을 점진적으로 읽기
이 시나리오에서는 대용량 로그의 마지막 두 줄을 읽는 것을 목표로 합니다. 파일을 메모리에 로드하지 않고 이 과정을 10초마다 반복합니다.
제공된 Go 코드 내 snippet:
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) }
file.Stat 메서드를 활용하여 파일 크기를 결정하고 file.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!