Goチャンネルの状態を確認したことがない場合、Goチャンネルを永久に開いたままにしておいても問題ありませんか?メモリリークが発生しますか?次のコードは大丈夫ですか?
func (requestCh chan<- Request) GetResponse(data RequestData) Response {
reply := make(chan Response)
requestCh <- Request{data: data, replyCh: reply}
return <-reply
}
Goチャンネルを永久に開いたままにして、決して閉じないでかまいません。チャネルが使用されなくなると、ガベージコレクションが行われます。
レシーバーがクローズを探している場合にのみ、チャネルをクローズする必要があることに注意してください。チャネルを閉じることは、チャネル上の制御信号であり、これ以上データが続かないことを示します。
はい、チャンネルを開いたままにしておいてかまいません。 goプログラミング言語 本の説明:
終了したら、すべてのチャネルを閉じる必要はありません。 すべてのデータが送信されたことを受信側のゴルーチンに伝えることが重要な場合にのみ、チャネルを閉じる必要があります。到達不能の場合、リソースが閉じられているかどうかに関係なく、そのリソースは回収されます。 (これを開いているファイルの閉じる操作と混同しないでください。すべてのファイルで終了したら、Closeメソッドを呼び出すことが重要です。)
はい、チャンネルを開いたままにしておいてかまいません。実際、これは典型的なものです。開いているチャネルは、チャネルオブジェクトへの参照を構成しないため、ガベージコレクションから保護されません。