一尘不染

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

go

有一个库可以导出文件,但是我想捕获文件的内容。我想将一个作者传递到库中,并能够读取该作家写到文件中的内容。最终,我想扩充该库以跳过编写此文件的过程。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")
}

阅读 217

收藏
2020-07-02

共1个答案

一尘不染

如果要在写入字节时捕获字节,请使用io.MultiWriter带有的a
bytes.Buffer作为第二个写入器。

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

或在写入时在stdout上查看该文件:

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

否则,如果您想重新读取相同的文件,则需要在写入后重新搜索开始:

codeFile.Seek(0, 0)
2020-07-02