【发布时间】:2021-11-17 00:25:59
【问题描述】:
我正在构建一个管理数据并将数据写入文件的 go 库。我写了一个文件写入器,我可以将数据传递给它,它会通过缓冲写入器将该数据写入文件。这意味着一旦服务关闭,使用该库的服务将不得不调用 close 方法以写入仍在缓冲区中的任何内容。我看到了两种处理方式:
- 公开服务可以使用的
Close方法。 - 使用频道。如果服务关闭通道,那将关闭库中的缓冲区。我的 lib 函数如下所示:
func (r *Repo) Write(ctx context.Context, data <-chan Data, errCh chan<- error) error {
for doc := range data {
err := r.file.Write(ctx, doc)
if err != nil {
errCh <- err
}
}
err = r.file.Close(ctx)
return err
}
我的问题是Write() 签名是否有意义,因为它需要一个接收通道和一个错误发送通道作为输入?我还没有看到类似的例子。也许有更好的组织方式?
【问题讨论】:
-
发布并期望使用
Close()方法很常见。我不明白为什么你应该让你的 API 使用通道,只是因为你有一些清理工作要做。
标签: go