从扫描仪转换为 io.Reader 的惯用方式

我最近遇到了如何从 CSV 文件中读取、对每一行应用一些转换并写入 HTTP 请求的问题。

我遇到的问题是如何从返回任意字节数的逐行读取器(如扫描仪)转换为字节读取器,后者在每次调用 Read() 时返回固定数量的字节。

我想出的最佳解决方案是构建一个自定义的 io.Reader,如果字节不合适,它将从扫描仪读取并在本地缓冲字节。然后缓冲的字节将在下一次调用 Read() 时返回。

直觉上,这感觉像是错误的解决方案,因为代码看起来像是标准库中可能已经存在的相当低级的解决方案。

有没有更好的方法,更惯用标准的 go 组件来做到这一点?


回首忆惘然
浏览 91回答 1
1回答

月关宝盒

一个简单的方法是使用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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go