9

Go にはチャネルがあるので、標準ライブラリがチャネルを IO にも使用するように設計されていないように見えるのはなぜだろうと思っていました。

代わりにリーダーとライターのタイプがありますが、チャネルを使用する際の問題は何でしょうか?

関数は、バイト スライスのチャネルを返し (1 バイトまたは 1 ビットの戻り値でさえ非効率的であると仮定します)、キャンセル要求用のチャネルとエラー報告用のチャネルを受け取ることができます。

・好奇心旺盛な囲碁初心者。

4

3 に答える 3

12

チャネルは、ゴルーチン間の通信に適しています。たとえば、stdin の読み取り、ストリームで何かを行い、結果を stdout に出力するなど、プログラムが単純なことを行う場合、チャネルの使用は過剰であり、パフォーマンスを不必要に低下させます。

標準ライブラリが、相互に通信するゴルーチンに固有の何かをどこかで提供しない限り、チャネルの、io.Readerまたはio.Writerチャネルを使用するような単純な操作をモデル化して、それぞれチャネルベースのメソッドセット (API) を持つ正当な理由はありません。

さらに、必要に応じて、単純な実装をチャネルにラップできますが、逆に、チャネル実装をそのプリミティブに「ラップ解除」することはできません。また、Go の作成者は明らかに明示性を好むため、パフォーマンスのボトルネックが隠されていません (そして驚くべきことです)。

于 2012-12-02T10:08:27.517 に答える