go - 从 io.Writer 写的内容中读取内容

标签 go io

有一个导出文件的库,但我想捕获文件的内容。我想将作者传递给图书馆,并能够读取作者写入文件的内容。最终我想扩充库以跳过写入此文件。 io.Copy 或 io.Pipe 是否可行?

库代码创建一个 *File 并将此句柄用作 io.Writer。 我尝试使用 io.Copy 但只读取了 0 个字节。

func TestFileCopy(t *testing.T) {

codeFile, err := os.Create("test.txt")
if err != nil {
    t.Error(err)
}
defer codeFile.Close()
codeFile.WriteString("Hello World")
n, err := io.Copy(os.Stdout, codeFile)
if err != nil {
    t.Error(err)
}
log.Println(n, "bytes")
}

最佳答案

如果您想在写入时捕获字节,请使用 io.MultiWriterbytes.Buffer 作为第二作者。

var buf bytes.Buffer
w := io.MultiWriter(codeFile, &buf)

或者在写入时在标准输出上查看文件:

w := io.MultiWriter(codeFile, os.Stdout)

否则,如果要重新读取同一个文件,则需要写完后seek回到开头:

codeFile.Seek(0, 0)

关于go - 从 io.Writer 写的内容中读取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351208/

相关文章:

go - 如何使用带有配置文件的log4go?

Golang 数据作为 interface{} panic

go - 未声明类型的嵌套结构

java - 有没有更好的替代 File.listFiles() 方法?

c - 数据类型检查导致 C 中永无止境的循环

java - 如何获得与网格布局内联的 jpg

Go例程从一个URL下载到一个文件

go - Lambda可以调用另一个Lambda,然后在子Lambda完成之前退出吗?

java - BufferedWriter 将 0 as\00 写入文本文件

c - 从 getchar() 读取输入给出意想不到的结果