gpt4 book ai didi

go - 将 []*io.PipeWriter 传递给 io.MultiWriter

转载 作者:IT王子 更新时间:2023-10-29 02:27:34 27 4
gpt4 key购买 nike

我创建了一堆 *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})

但是它说不能在 io.MultiWriter 的参数中使用编写器(类型 []*io.PipeWriter)作为类型 []io.Writer。但如果我将 io.MultiWriter(writers) 更改为 io.MultiWriter(writers[0],writers[1]) 它会起作用。我怎样才能通过不必单独传递编写器来使现有功能工作。

最佳答案

不幸的是,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

关于go - 将 []*io.PipeWriter 传递给 io.MultiWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42335756/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com