私はbufio.NewScanner
を使って次の関数を使ってファイルを1行ずつ読み込もうとしていました。Golangのbufio.NewScannerは、それぞれの行ではなくメモリ内のファイル全体を読み込みますか?
func TailFromStart(fd *os.File, wg *sync.WaitGroup) {
fd.Seek(0,0)
scanner := bufio.NewScanner(fd)
for scanner.Scan() {
line := scanner.Text()
offset, _ := fd.Seek(0, 1)
fmt.Println(offset)
fmt.Println(line)
offsetreset, _ := fd.Seek(offset, 0)
fmt.Println(offsetreset)
}
offset, err := fd.Seek(0, 1)
CheckError(err)
fmt.Println(offset)
wg.Done()
}
私はそれがファイルEOF
に達するまでしかし、各反復で同じ値を印刷され、昇順にオフセット印刷するために期待していました。
127.0.0.1 - - [11/Aug/2016:22:10:39 +0530] "GET /ttt HTTP/1.1" 404 437 "-" "curl/7.38.0"
613
613
127.0.0.1 - - [11/Aug/2016:22:10:42 +0530] "GET /qqq HTTP/1.1" 404 437 "-" "curl/7.38.0"
613
613は、ファイル内の文字の合計です。
cat /var/log/apache2/access.log | wc
7 84 613
は、私はそれが間違って理解アム、またはbufio.NewScanner
は、メモリ内のファイル全体を読み込み、メモリ内のことを反復処理しますか?もしそうなら、行単位で読む方が良いでしょうか?
いいえ、デフォルトのバッファサイズは4096バイトです。大きなファイルで試してみてください。 – JimB