我正在使用 Go 开发 TCP 服务器。现在我想通知所有与客户端交谈的 goroutine 放弃他们的连接,转储他们所拥有的并停止。
关闭 channel 是一种通知所有人的方式。
问题是:这是惯用的 Go 语言吗?如果我错了;那么我应该怎么做(通知所有的 goroutines——比如 .NET 中的 ManualResetEvent)?
注意:我是 Go 新手,刚刚学习并开始使用 TCP Server,因为我之前用 C# 编写过。
最佳答案
是的,关闭 channel 是 Goroutines 之间通信的惯用 Go 方式。
您需要在每个 goroutine 启动时将一个 channel 传递给它,并在每个网络事件之后使用 select 调用检查该 channel 。
您还需要为网络事件设置超时,这样您就不会永远挂着连接。
关于concurrency - 通知所有 goroutine,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15373011/