Sobes.tech
Junior — Middle

¿Cómo se pueden obtener las últimas diez líneas de un archivo de registro?

sobes.tech AI

Respuesta de la IA

En Go, para obtener las últimas diez líneas de un archivo de registro, se puede leer el archivo línea por línea y guardar las últimas 10 líneas en un búfer circular (por ejemplo, un slice de tamaño fijo). Esto es eficiente en memoria y no requiere cargar todo el archivo.

Ejemplo:

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("Error:", err)
		return
	}
	for _, line := range lines {
		fmt.Println(line)
	}
}

Este código lee el archivo línea por línea, guardando solo las últimas 10 líneas.