我正在使用 Go 开发 TCP 服务器。现在我想通知所有与客户端对话的 goroutines 放弃他们的连接,转储他们拥有的东西并停止。
关闭通道是通知所有通道的一种方式。
问题是:那是惯用的 Go 吗?如果我错了;那我应该怎么做(通知所有的goroutines - 比如.NET中的ManualResetEvent)?
注意:我是 Go 新手,刚刚学习并开始使用 TCP Server,因为我之前用 C# 编写过。
我正在使用 Go 开发 TCP 服务器。现在我想通知所有与客户端对话的 goroutines 放弃他们的连接,转储他们拥有的东西并停止。
关闭通道是通知所有通道的一种方式。
问题是:那是惯用的 Go 吗?如果我错了;那我应该怎么做(通知所有的goroutines - 比如.NET中的ManualResetEvent)?
注意:我是 Go 新手,刚刚学习并开始使用 TCP Server,因为我之前用 C# 编写过。
是的,关闭通道是 Goroutine 之间通信的惯用 Go 方式。
您需要在每个 goroutine 启动时将通道传递给它,并在每个网络事件之后使用 select 调用检查通道。
您还需要在网络事件上设置超时,这样您就不会永远挂起连接。
从 Go 1.7 开始,您可以使用context包。