2016-10-25 2 views
-1

Goの哲学のため、チャンネルは送信者だけが閉じなければなりません。チャネルが双方向である場合、どこを閉じるべきですか?go:どちらのチャネルエンドポイントが双方向の場合にチャネルを閉じる必要がありますか?

+0

作成されたエンドポイント。 – RickyA

+2

チャンネルを閉じなければならない明確なポイントがない場合、なぜそれを閉じるのですか? – JimB

+0

チャンネルをどこで閉じるべきか明確なポイントを持つことは、新しいエンドポイントに新しいメッセージを送信しないようにもう一方のエンドポイントに通知することを意味します。送信者がチャネルを閉じなければならないというパラダイムではうまく解決されるように思われる問題だから...解決する唯一の方法は双方向チャネルを使用しないことです。 – Techradar

答えて

1

goには双方向チャネルがないため、少し質問が難しいです。データは、ライターからリーダーへの単一の方向にしか流れません。

あなたが行くことができるものは、チャンネル上の複数の読者またはライターです。これが意味をなさないかどうかは、文脈によって少し異なります。ライターが複数ある場合は、閉じる操作のために何らかの種類の同期が必要です(例:ミューテックス。ただし、クローズドチャネルで書き込まないようにするには、各書き込み操作の前にこれをロックする必要があります。チャンネルが受信側で閉じられているという情報が本当に必要ない場合は、ガベージコレクタも閉じられていないチャンネルを収集するだけで、閉じるを省略することもできます。

+2

確かにgolangチャンネルは双方向であり、たとえ言語仕様がそれらのタイプであっても(あなたがそのタイプの一部として方向を指定しない限り) – nos

+0

あなたの答えとその声明のほかにありがとうここでは面白い入力がある双方向チャンネルがありますが、ガベージコレクタが閉じられていないチャンネルを収集することはわかりませんでした。なぜなら、外部から強制的にクローズできないと思ったからです。厳密に単一方向の方法でチャネルを使用して滞在し、そのような目的のために2つを開く。 – Techradar

関連する問題