4

我正在使用 Go 开发 TCP 服务器。现在我想通知所有与客户端对话的 goroutines 放弃他们的连接,转储他们拥有的东西并停止。

关闭通道是通知所有通道的一种方式。

问题是:那是惯用的 Go 吗?如果我错了;那我应该怎么做(通知所有的goroutines - 比如.NET中的ManualResetEvent)?

注意:我是 Go 新手,刚刚学习并开始使用 TCP Server,因为我之前用 C# 编写过。

4

2 回答 2

6

是的,关闭通道是 Goroutine 之间通信的惯用 Go 方式。

您需要在每个 goroutine 启动时将通道传递给它,并在每个网络事件之后使用 select 调用检查通道。

您还需要在网络事件上设置超时,这样您就不会永远挂起连接。

于 2013-03-12T22:04:41.020 回答
1

从 Go 1.7 开始,您可以使用context包。

于 2017-08-02T12:23:07.173 回答