Junior — Middle
Como obter as últimas dez linhas de um arquivo de log?
sobes.tech IA
Resposta da IA
Em Go, para obter as últimas dez linhas de um arquivo de log, pode ler o arquivo linha por linha e guardar as últimas 10 linhas num buffer circular (por exemplo, um slice de tamanho fixo). Isto é eficiente em termos de memória e não requer carregar todo o arquivo.
Exemplo:
package main
import (
"bufio"
"fmt"
"os"
)
func tail(filename string, n int) ([]string, error) {
file, err := os.Open(filename)
if err != nil {
return nil, err
}
defer file.Close()
lines := make([]string, 0, n)
scanner := bufio.NewScanner(file)
for scanner.Scan() {
if len(lines) == n {
lines = lines[1:]
}
lines = append(lines, scanner.Text())
}
if err := scanner.Err(); err != nil {
return nil, err
}
return lines, nil
}
func main() {
lines, err := tail("logfile.log", 10)
if err != nil {
fmt.Println("Erro:", err)
return
}
for _, line := range lines {
fmt.Println(line)
}
}
Este código lê o arquivo linha por linha, guardando apenas as últimas 10 linhas.