I’m sending a request to a remote server, but don’t care about its response. I don’t want to close the connection directly because the server gets a Broken pipe
error if I do that.
I currently loop on Read() calls with a buffer:
con, _ := net.Dial("tcp", host)
// ...
data := make([]byte, 512)
for {
if _, err = con.Read(data); err == io.EOF {
break
}
}
But I’m looking for something like >/dev/null
in Bash. I’ve found ioutils.Discard
, but it’s an io.Writer
and con.Read
only works on a []byte
buffer.
Is there a more efficient way than just reading in a buffer like what I’m currently doing?
you have to use ioutil.Discard
like this
io.Copy(ioutil.Discard, con)
io.Copy
copies from a src io.Reader
to a io.Writer
func Copy(dst Writer, src Reader) (written int64, err error)
io.Reader is an interface defined as
type Reader interface {
Read(p []byte) (n int, err error)
}
io.Writer
type Writer interface {
Write(p []byte) (n int, err error)
}
net.Conn
implements io.Reader
and ioutil.Discard
implements io.Writer
Since Go 1.16 (Feb 2021), programs should be using io.Discard
:
package main
import (
"fmt"
"io"
)
func main() {
fmt.Fprint(io.Discard, "hello world")
}
https://golang.org/pkg/io#Discard
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With