在 Go 语言中读取文件的最后几行,需要先确定文件的大小,然后从倒数第 N 行开始读取。

具体实现方法如下:

  1. 使用 os.Stat 函数获取文件信息,并从中获取文件大小。

  2. 使用 bufio.NewReader 创建一个带缓冲的读取器,并将该读取器与文件关联。

  3. 通过读取器的 ReadLine 函数从倒数第 N 行开始读取文件,直到读取到第一行为止。

代码示例:

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	file, err := os.Open("test.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()

	// 获取文件信息
	info, _ := file.Stat()

	// 创建带缓冲的读取器
	r := bufio.NewReader(file)

	// 移动读取器的读取位置,使其从倒数第 N 行开始读取
	var n int64 = 10
	var line string
	for i := int64(0); i < info.Size(); i++ {
		_, err := r.Seek(-1*i, 2)
		if err != nil {
			break
		}
		b, _, err := r.ReadLine()
		if err != nil {
			break
		}
		line = string(b) + "\n" + line
		if int64(len(line)) >= n {
			break
		}
	}
	fmt.Println(line)
}