回答:
Goチャネルを永久に開いたままにし、決して閉じないでください。チャネルが使用されなくなると、ガベージコレクションされます。
レシーバーがクローズを探している場合にのみチャネルをクローズする必要があることに注意してください。チャネルを閉じることは、チャネル上の制御信号であり、後続のデータがないことを示します。
gc
の作成者とgccgo
sayチャネルclose
の作成者は、を探している場合を除き、必要ありませんclose
。それは権威あるアドバイスです。
はい、チャンネルを開いたままにしても問題ありません。通り、外出先プログラミング言語の本は次のように述べました。
使い終わったら、すべてのチャンネルを閉じる必要はありません。すべてのデータが送信されたことを受信側のゴルーチンに伝えることが重要な場合にのみ、チャネルを閉じる必要があります。ガベージコレクターが到達不可能であると判断したチャネルは、閉じられているかどうかに関係なく、そのリソースを再利用します。(これを開いているファイルの閉じる操作と混同しないでください。終了したら、すべてのファイルに対してCloseメソッドを呼び出すことが重要 です。)
「Goチャネルを使用する一般的な原則の1つは、チャネルに複数の同時送信者がいる場合、受信側からチャネルを閉じないでください。チャネルを閉じないでください。」
上記の回答で明確に述べたように、クリーンアップのマークが付けられると、すべてのチャネルが最終的にGCされるため、チャネルを閉じないでおくことは問題ありgc
ません。明示的に閉じられていません。
Goはガベージコレクションされるため、何も「解放」する必要はありません。
チャネルを閉じる可能性がありますが、それは主に-close(channel)として使用されます-そのチャネルで他に何も送信されないことをゴルーチン(またはメインプログラム)に通知します。