我应该如何在Go中重用流?

时间:2019-02-23 16:56:10

标签: go

我有一个结构Artifact和以下两个有趣的功能:

type Artifact struct {
    Name string
    ZipFile io.ReadWriter
}

func New(name string, files []string, zipArchiveStream io.ReadWriter) *Artifact {}
func (a *Artifact) Upload() error {}

这就是问题所在:在传递io.ReadWriter之前,我正在使用文件名。我需要对zip文件执行三个操作:

  1. 向其中添加必要的文件(即写入)
  2. 重新读取它以计算SHA256和(即,搜索,读取)
  3. 将其上传到S3存储桶(即“搜索”,“读取”)

那么以前,当使用文件名时,我为每个操作打开,关闭,重新打开等。但是,我开始编写单元测试,我意识到我的代码不是真正的可测试的,所以我决定使用io.ReadWriter,以便可以按实际代码使用打开文件,并在测试中传递缓冲区

现在的问题是,在读取流之后,需要重置其内部指针才能执行第二次读取(即计算校验和,然后上传),但是据我所知,流不能倒带。我应该如何解决这个问题?因为在我当前的方法上似乎有些概念上的错误。

1 个答案:

答案 0 :(得分:4)

您是否考虑改用observers界面?

io.ReadWriteSeeker实现bytes.Reader