我不喜欢 Go 的一件事是通道接收也会从通道中删除数据。这仅允许两个 goroutine 相互通信,即使在某些情况下两个或多个 goroutine 应该能够相互通信。
我知道我可以创建一个通道数组并且每个 goroutine 都有一个通道,但是将数据从一个 goroutine 移动到所有其他 goroutine 比将数据的一个副本移动到所有 goroutine 上的数据要多得多。
考虑一个案例,当我有数千个客户端连接到服务器时,我希望一个只向其中一半的客户端发送消息,即 500 个接收该消息的 goroutine。如果消息是 512 字节,这将在 ram 移动中变成 250 KB 的数据,即使如果通道不会在接收时删除数据,也可以只移动一次相同的数据。
所以我问是否有一些简单的方法可以做到这一点,还是我必须使用同步包中的互斥锁?虽然请告诉我我是否计算错误并且频道不会复制数据,因为在这种情况下我可以管理频道数组。