首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将[]*io.PipeWriter传递给io.MultiWriter

将[]*io.PipeWriter传递给io.MultiWriter
EN

Stack Overflow用户
提问于 2017-02-20 10:56:50
回答 1查看 524关注 0票数 0

我有一堆的*io.PipeWriter创建,并想使一个多作者在一个函数的基础上所有这些吹风机。所以我调用了一个函数,比如

代码语言:javascript
复制
func copyToWriters(reader *bufio.Reader, errs chan error, writers []*io.PipeWriter) {
  for _, writer := range writers {
    defer writer.Close()
  }
  mw := io.MultiWriter(writers)
  _, err := io.Copy(mw, reader)
  if err != nil {
    errs <- err
  }
}

我使用参数copyToWriters(reader, errs, []*io.PipeWriter{w1, w2})调用该方法

但上面写的是cannot use writers (type []*io.PipeWriter) as type []io.Writer in argument to io.MultiWriter。但是,如果我将io.MultiWriter(writers)更改为io.MultiWriter(writers[0],writers[1]),它就可以工作。我如何让现有的函数工作,而不必单独传递编写器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-20 11:15:50

不幸的是,Golang的类型系统不允许将[]*io.PipeWriter转换为[]io.Writer,即使*io.PipeWriter实现了io.Writer,因为它需要O(n)操作(reference)

您可以执行的最佳操作是创建另一个[]io.Writer并将管道编写器复制到其中

代码语言:javascript
复制
ws := make([]io.Writer, len(writers))
for i, w := range writers {
    ws[i] = w
}
mw := io.MultiWriter(ws...)

为什么你需要...,请阅读the document

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42335756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档