我有一堆的*io.PipeWriter创建,并想使一个多作者在一个函数的基础上所有这些吹风机。所以我调用了一个函数,比如
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]),它就可以工作。我如何让现有的函数工作,而不必单独传递编写器。
发布于 2017-02-20 11:15:50
不幸的是,Golang的类型系统不允许将[]*io.PipeWriter转换为[]io.Writer,即使*io.PipeWriter实现了io.Writer,因为它需要O(n)操作(reference)。
您可以执行的最佳操作是创建另一个[]io.Writer并将管道编写器复制到其中
ws := make([]io.Writer, len(writers))
for i, w := range writers {
ws[i] = w
}
mw := io.MultiWriter(ws...)为什么你需要...,请阅读the document
https://stackoverflow.com/questions/42335756
复制相似问题