Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许在net.Conn和通道上进行Go例程选择的方法?_Go - Fatal编程技术网

允许在net.Conn和通道上进行Go例程选择的方法?

允许在net.Conn和通道上进行Go例程选择的方法?,go,Go,我觉得这一定是一种常见的模式,但似乎找不到解决办法 假设有一个Go应用程序正在进行出站TCP连接。我将使用net.Dial并在连接后生成一个Go例程来处理套接字(net.Conn)。这是非常简单和常见的。我想弄清楚的是,让这个围棋程序有一个通道,它在这个通道上读写来自这个套接字的消息,最好的方法是什么select只能等待频道,不能等待net.Conn。我是否轮询套接字以获取数据,然后检查通道以获取数据?这似乎效率极低。此问题的常见解决方案是创建两个goroutine:一个从套接字读取并写入通道,

我觉得这一定是一种常见的模式,但似乎找不到解决办法


假设有一个Go应用程序正在进行出站TCP连接。我将使用
net.Dial
并在连接后生成一个Go例程来处理套接字(
net.Conn
)。这是非常简单和常见的。我想弄清楚的是,让这个围棋程序有一个通道,它在这个通道上读写来自这个套接字的消息,最好的方法是什么
select
只能等待频道,不能等待
net.Conn
。我是否轮询套接字以获取数据,然后检查通道以获取数据?这似乎效率极低。

此问题的常见解决方案是创建两个goroutine:一个从套接字读取并写入通道,另一个从通道读取并写入套接字。从套接字读取的goroutine应在套接字关闭时终止,并向另一个goroutine发出信号(通过取消上下文或关闭通道),使其停止等待通道。

创建两个goroutine,一个从套接字读取,另一个向通道写入,另一个是从一个频道读,然后给插座写。是的,这也是我得出的结论。我只是无法克服每次读写的例程,但我需要打破例程类似于线程的想法。如果你作为答案发布,我接受。干杯。