Как прочитать последние 10 строк файла log

«Как прочитать последние 10 строк файла log» — вопрос из категории Linux, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для чтения последних 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
}

Нюансы:

  1. Файл должен существовать и быть доступным для чтения
  2. Для больших файлов лучше использовать Seek для перемещения в конец файла
  3. В Windows могут быть проблемы с переносами строк (rn)
  4. Функция возвращает пустой слайс, если файл содержит меньше строк чем запрошено