登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-18 20:27:35 442浏览 收藏

本篇文章给大家分享《从扫描仪转换为 io.Reader 的惯用方法》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

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

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

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

这就是我想到的: https://gist.github.com/paulsc/6a0bf30a2a8d898f7a8086aedf6af1e1

直观上,这感觉像是错误的解决方案,因为代码似乎是一个相当低级的解决方案,可能已经存在于标准库中。

是否有更好的方法、更惯用的方法来使用标准 go 组件来做到这一点?


解决方案


一个简单的方法是使用 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
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《从扫描仪转换为 io.Reader 的惯用方法》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>