我试图解决的问题是在网络应用程序中使用io.Reader和io.Writer而不使用bufio和字符串,这是我在网上找到的例子。为了提高效率,我试图避免那些隐含的memcopys。
我在游戏区域(https://play.golang.org/p/-7YDs1uEc5)上使用net.Pipe创建了一个测试应用程序。有一个数据源和接收器通过net.Pipe连接对(用于建模网络连接)和远端的环回进行通信,以反映我们的数据。
程序获取环回代理读取发送数据的程度,但据我所知,写回连接锁;它肯定永远不会完成。此外,接收器中的接收器从不接收任何数据。
我无法弄清楚为什么写入不能继续进行,因为它与完成工作的路径完全对称。我已经编写了其他使用双向网络连接的测试系统,但是一旦我停止使用bufio和ReadString,我就遇到了这个问题。我看了那些代码,看不出我错过了什么。
提前感谢您的帮助。
答案 0 :(得分:2)
问题出在第68行:
data_received := make([]byte, 0, count)
此行创建一个长度为0且容量为count
的切片。对Read
的调用不会读取数据,因为长度为0.对Write
的调用因为永远不会读取数据而阻塞。
通过将行更改为:
来解决此问题data_received := make([]byte, count)
请注意,可能无法打印“完成写入”,因为程序可以在dataSrc
完成执行之前退出。