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

时间:2017-07-27 12:44:57

标签: go io

有一个导出文件的库,但我想捕获文件的内容。我想将作者传递给库,并能够阅读作者写入文件的内容。最终我想扩充库以跳过编写此文件。 这可能与io.Copy或io.Pipe一起使用吗?

库代码创建一个*文件,并将此句柄用作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")
}

1 个答案:

答案 0 :(得分:5)

如果要在写入字节时捕获字节,请使用io.MultiWriter作为第二个作者bytes.Buffer

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

或者在stdout上查看文件:

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

否则,如果你想重新读取同一个文件,你需要在写完后回头找:

codeFile.Seek(0, 0)