Sobes.tech
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.