我正在向远程服务器发送请求,但不关心其响应。我不想直接关闭连接,因为如果我这样做,服务器会出现Broken pipe
错误。
我目前使用缓冲区循环Read()调用:
con, _ := net.Dial("tcp", host)
// ...
data := make([]byte, 512)
for {
if _, err = con.Read(data); err == io.EOF {
break
}
}
但我正在寻找像Bash中>/dev/null
这样的东西。我找到了ioutils.Discard
,但这只是io.Writer
而con.Read
仅适用于[]byte
缓冲区。
是否有一种更有效的方式,而不仅仅是像我目前正在做的那样读取缓冲区?
答案 0 :(得分:11)
你必须像这样使用ioutil.Discard
io.Copy(ioutil.Discard, con)
io.Copy
从src io.Reader
复制到io.Writer
func Copy(dst Writer, src Reader) (written int64, err error)
io.Reader 是一个定义为
的接口type Reader interface {
Read(p []byte) (n int, err error)
}
io.Writer
type Writer interface {
Write(p []byte) (n int, err error)
}
net.Conn
实施io.Reader
和ioutil.Discard
实施io.Writer
答案 1 :(得分:1)
自 Go 1.16(2021 年 2 月)起,程序应使用 io.Discard
:
package main
import (
"fmt"
"io"
)
func main() {
fmt.Fprint(io.Discard, "hello world")
}