我最近遇到了如何从 CSV 文件中读取、对每一行应用一些转换并写入 HTTP 请求的问题。我遇到的问题是如何从返回任意字节数的逐行读取器(如扫描仪)转换为字节读取器,后者在每次调用 Read() 时返回固定数量的字节。我想出的最佳解决方案是构建一个自定义的 io.Reader,如果字节不合适,它将从扫描仪读取并在本地缓冲字节。然后缓冲的字节将在下一次调用 Read() 时返回。直觉上,这感觉像是错误的解决方案,因为代码看起来像是标准库中可能已经存在的相当低级的解决方案。有没有更好的方法,更惯用标准的 go 组件来做到这一点?
1 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
一个简单的方法是使用io.Pipe.
func ScannerToReader(scanner *bufio.Scanner) io.Reader {
reader, writer := io.Pipe()
go func() {
defer writer.Close()
for scanner.Scan() {
writer.Write(scanner.Bytes())
}
}()
return reader
}
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报
0/150
提交
取消