【发布时间】:2019-02-21 10:18:03
【问题描述】:
我正在使用go 构建一个 TCP 代理,但我遇到了一个小问题。在实际处理连接c1 并将其转发到c2 之前,我想做一些检查。为此,我需要来自c1 的字节切片的字符串表示形式。不幸的是,_, err := io.CopyBuffer(w, r, buf) 直接在写入器和读取器之间复制[]byte,如果我在cp 函数之前执行c1.Read(),则[]byte 已经被读取。
这是包含连接处理的函数:
func (p *proxy) handle(c1 net.Conn) {
p.log.Printf("accepted %v", c1.RemoteAddr())
defer p.log.Printf("disconnected %v", c1.RemoteAddr())
defer c1.Close()
c2, err := dialer.Dial("tcp", p.dial)
log.Println("DIAL:", p.dial)
if err != nil {
p.log.Print("C2", err)
return
}
defer c2.Close()
errc := make(chan error, 2)
cp := func(w io.Writer, r io.Reader) {
buf := bufferPool.Get().([]byte)
_, err := io.CopyBuffer(w, r, buf)
errc <- err
bufferPool.Put(buf)
}
go cp(struct{ io.Writer }{c1}, c2)
go cp(c2, struct{ io.Reader }{c1})
err = <-errc
if err != nil {
p.log.Print("F-ERROR ->", err)
}
}
有没有办法“复制”[]byte,以便我可以使用复制的内容显示为字符串?
【问题讨论】:
-
相关/可能重复:Golang read request body