Sobes.tech
Junior — Middle

Πώς μπορείτε να λάβετε τις τελευταίες δέκα γραμμές ενός αρχείου καταγραφής;

sobes.tech AI

Απάντηση από AI

Στη γλώσσα Go, για να λάβετε τις τελευταίες δέκα γραμμές ενός αρχείου καταγραφής, μπορείτε να διαβάσετε το αρχείο γραμμή προς γραμμή και να αποθηκεύσετε τις τελευταίες 10 γραμμές σε έναν κυκλικό buffer (π.χ., ένα slice σταθερού μεγέθους). Αυτό είναι αποδοτικό στη μνήμη και δεν απαιτεί φόρτωση ολόκληρου του αρχείου.

Παράδειγμα:

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("Σφάλμα:", err)
		return
	}
	for _, line := range lines {
		fmt.Println(line)
	}
}

Αυτός ο κώδικας διαβάζει το αρχείο γραμμή προς γραμμή, αποθηκεύοντας μόνο τις τελευταίες 10 γραμμές.