I have many of net.Conn
and i want to implement multi writer. so i can send data to every available net.Conn
.
My current approach is using 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)
}
}
but the problem is, i must specify every net.Conn
index in io.MultiWriter
and it will be a problem, because the slice size is dynamic.
when i try another approach by pass the []net.Conn
to io.MultiWriter
, like code below
func route(conn, dst []net.Conn) {
targets := io.MultiWriter(dst...)
_, err := io.Copy(targets, conn)
if err != nil {
log.Println(err)
}
}
there is an error "cannot use mirrors (variable of type []net.Conn) as []io.Writer value in argument to io.MultiWriter"
Is there proper way to handle this case? so i can pass the net.Conn
slice to io.MultiWriter
.
Thank you.
CodePudding user response:
io.MultiWriter()
has a param of type ...io.Writer
, so you may only pass a slice of type []io.Writer
.
So first create a slice of the proper type, copy the net.Conn
values to it, then pass it like this:
ws := make([]io.Writer, len(dst))
for i, c := range dst {
ws[i] = c
}
targets := io.MultiWriter(ws...)