使用 buffo.read 读取文件时 Golang 动态调整切片大小

Golang dynamic sizing slice when reading a file using buffo.read

我有一个问题,我需要使用 bufio.read 逐行读取一个 tsv 文件,我需要记录我读取的每一行有多少字节。

问题是,我似乎不能只初始化一个空切片并将其传递给 bufio.read 并期望该切片包含文件的整行。

file, _ := os.Open("file.tsv")

reader := bufio.NewReader(file)

b := make([]byte, 10)
for {
    bytesRead, err:= reader.Read(b)
    fmt.Println(bytesRead, b)
    if err != nil {
        break
    }
}

因此,对于此示例,由于我将切片指定为 10 个字节,因此 reader 最多读取 10 个字节,即使该行大于 10 个字节。

但是:

file, _ := os.Open("file.tsv")

reader := bufio.NewReader(file)

b := byte{} //or var b []byte
for {
    bytesRead, err:= reader.Read(b)
    fmt.Println(bytesRead, b)
    if err != nil {
        break
    }
}

这将始终读取 0 个字节,我假设它是因为缓冲区的长度为 0 或容量为 0。

如何逐行读取文件,将整行保存在变量或缓冲区中,然后 return 我到底读取了多少字节?

谢谢!

如果您想逐行阅读,并且您使用的是缓冲 reader,请使用缓冲 reader 的 ReadBytes method.

line,err := reader.ReadBytes('\n')

无论字节长度如何,这将为您提供一整行,一次一行。