将 []net.Conn 传递给 io.MultiWriter

Passing []net.Conn to io.MultiWriter

我有很多 net.Conn,我想实现多编写器。这样我就可以将数据发送到每个可用的 net.Conn.

我目前的方法是使用 io.MultiWriter

func route(conn, dst []net.Conn) {
    targets := io.MultiWriter(dst[0], dst[1])

    _, err := io.Copy(targets, conn)
    if err != nil {
        log.Println(err)
    }
}

但问题是,我必须在 io.MultiWriter 中指定每个 net.Conn 索引,这将是一个问题,因为切片大小是动态的。

当我尝试另一种方法将 []net.Conn 传递给 io.MultiWriter 时,如下面的代码

func route(conn, dst []net.Conn) {
    targets := io.MultiWriter(dst...)

    _, err := io.Copy(targets, conn)
    if err != nil {
        log.Println(err)
    }
}

存在错误“无法将镜像([]net.Conn 类型的变量)用作 io.MultiWriter 参数中的 []io.Writer 值”

有没有合适的方法来处理这种情况?所以我可以将 net.Conn 切片传递给 io.MultiWriter.

谢谢。

io.MultiWriter() 有一个 ...io.Writer 类型的参数,所以你只能传递一个 []io.Writer.

类型的切片

所以首先创建一个正确类型的切片,将 net.Conn 值复制到它,然后像这样传递它:

ws := make([]io.Writer, len(dst))
for i, c := range dst {
    ws[i] = c
}

targets := io.MultiWriter(ws...)