Sobes.tech
Junior — Middle

Kaip gauti paskutines dešimt eilutes iš žurnalo failo?

sobes.tech AI

Atsakymas iš AI

Go kalboje, norint gauti paskutines dešimt eilutės iš žurnalo failo, galite skaityti failą eilutė po eilutės ir paskutines 10 eilutės saugoti cikliniame buferyje (pavyzdžiui, fiksuoto dydžio skiltyje). Tai yra efektyvu atminties požiūriu ir nereikalauja įkelti viso failo.

Pavyzdys:

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

Šis kodas skaito failą eilutė po eilutės ir saugo tik paskutines 10 eilutės.