Go について私が気に入らない点の 1 つは、チャネル受信によってチャネルからデータも削除されることです。これにより、2 つ以上のゴルーチンが互いに通信できるようにする必要がある場合でも、2 つのゴルーチンのみが互いに通信できるようになります。
チャネルの配列を作成し、ゴルーチンごとにチャネルを持つことができることはわかっていますが、データを 1 つのゴルーチンから他のすべてのゴルーチンに移動することは、データの 1 つのコピーをすべてのゴルーチンに移動するよりもはるかに多くのデータを RAM に転送します。
サーバーに数千のクライアントが接続されていて、そのメッセージを受信する 500 の goroutine の半分だけにメッセージを送信したい場合を考えてみてください。メッセージが 512 バイトの場合、RAM の移動では 250 キロバイトのデータになりますが、チャネルが受信時にデータを削除しない場合、同じデータを 1 回だけ移動することができます。
それで、これを行う簡単な方法があるかどうか、または同期パッケージのミューテックスを使用する必要があるかどうかを尋ねていますか? ただし、計算が間違っていて、チャネルがデータをコピーしない場合は教えてください。その場合、チャネルの配列を管理できるからです。