Ответ
Для чтения последних 10 строк файла в Go можно использовать bufio.Scanner с буферизацией. Вот пример:
func readLastLines(filename string, lines int) ([]string, error) {
file, err := os.Open(filename)
if err != nil {
return nil, err
}
defer file.Close()
scanner := bufio.NewScanner(file)
var buffer []string
for scanner.Scan() {
buffer = append(buffer, scanner.Text())
if len(buffer) > lines {
buffer = buffer[1:]
}
}
if err := scanner.Err(); err != nil {
return nil, err
}
return buffer, nil
}
Нюансы:
- Файл должен существовать и быть доступным для чтения
- Для больших файлов лучше использовать
Seekдля перемещения в конец файла - В Windows могут быть проблемы с переносами строк (
rn) - Функция возвращает пустой слайс, если файл содержит меньше строк чем запрошено