gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:46:47 24 4
gpt4 key购买 nike

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

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

我想出的最佳解决方案是构建一个自定义 io.Reader,如果字节不合适,它会从 Scanner 读取并在本地缓冲字节。然后缓冲的字节将在下一次调用 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
}

关于go - 从扫描仪转换为 io.Reader 的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53894883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com