在 Go 语言中,可以使用 bufio 包中的 ScannerReader 来逐行读取文件。以下是一些常见的方法:

  1. 使用 bufio.Scanner
package main

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

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

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		log.Fatal(err)
	}
}
  1. 使用 bufio.ReaderReadString
package main

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

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

	reader := bufio.NewReader(file)
	for {
		line, err := reader.ReadString('\n')
		if err != nil {
			break
		}
		fmt.Print(line)
	}
}
  1. 使用 bufio.ReaderReadLine
package main

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

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

	reader := bufio.NewReader(file)
	for {
		line, isPrefix, err := reader.ReadLine()
		if err != nil {
			break
		}
		if isPrefix {
			// 处理长行,可能需要多次调用 ReadLine
			continue
		}
		fmt.Print(string(line))
	}
}

注意,如果一行的长度超过了缓冲区的大小,ReadLine 会返回 isPrefixtrue,这时需要继续读取下一部分直到完整的行被读取。在实际应用中,可能需要循环调用 ReadLine 直到 isPrefixfalse

以上方法都可以有效地逐行读取文件内容。选择哪种方法取决于具体的应用场景和性能要求。