为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
回首忆惘然 2023-05-22 15:56:32
我最近遇到了如何从 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

}


查看完整回答
反对 回复 2023-05-22
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信