登录
首页 >  Golang >  Go问答

使用 io.MultiWriter 将 net.Conn 传入多个写入器

来源:stackoverflow

时间:2024-02-16 13:42:24 489浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《使用 io.MultiWriter 将 net.Conn 传入多个写入器》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我有很多 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...)

理论要掌握,实操不能落!以上关于《使用 io.MultiWriter 将 net.Conn 传入多个写入器》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>