问题描述
在 Go 1.1 和更新版本中,最简单的方法是使用bufio.Scanner
. 这是一个从文件中读取行的简单示例:
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
file, err := os.Open("/path/to/file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
// optionally, resize scanner's capacity for lines over 64K, see next example
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
这是Reader
逐行读取的最干净的方式。
有一个警告:扫描仪会在行超过 65536 个字符时出错。如果您知道您的行长度大于 64K,请使用以下Buffer()
方法增加扫描仪的容量:
...
scanner := bufio.NewScanner(file)
const maxCapacity = longLineLen // your required line length
buf := make([]byte, maxCapacity)
scanner.Buffer(buf, maxCapacity)
for scanner.Scan() {
...
解决方法
我无法file.ReadLine
在 Go 中找到函数。我可以弄清楚如何快速写一个,但我只是想知道我是否在这里忽略了一些东西。如何逐行读取文件?